JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Object Relational Mapping » Hibernate  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to postflat modego to previous topicgo to next topic
本主題所含的標籤
作者 Re:Hibernate HQL Left Join [Re:wildpeanut]
qrtt1





發文: 1756
積分: 32
於 2010-08-09 23:56 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
wildpeanut wrote:
你好,

感謝你的回覆, 我原本的方法並沒有使用annotation, 後來改用annotation時無法直接使用JBoos提供的Hibernate Eclipse plugin 裡面的HQL Editor查詢...
Eclipse會報 An AnnotationConfiguration instance is required to use, 我猜可能要設類似<annotationconfiguration configurationfile="${class.dir}/hibernate.cfg.xml"/>的東西, 可是不知要加在哪 @@

拉拉紮紮說了一堆, 最主要還是要感謝你提供另一個方法 session.createSQLQuery("...")
我晚點試試看 /(_ _)\

另外想請教一點, 如果說Hibernate是為了讓我不用將永久層綁死在某個特定的DB上, 那使用原生的SQL查詢是不是不會是一個最終的解決方法?


你不需要特別轉成 Annotation 在沒原先的做法一定能用 <many-to-many> 做出 1-to-* 的效果。

AnnotationConfiguration 是用在讀 Configuration 時為了讀那些含有 Annotation 的類別用的。
是用在 HibernateUtil 裡的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
 
public class HibernateUtil {
 
  private static final SessionFactory sessionFactory = buildSessionFactory();
 
  private static SessionFactory buildSessionFactory() {
    try {
      // Create the SessionFactory from hibernate.cfg.xml
      return new AnnotationConfiguration().configure()
          .buildSessionFactory();
    } catch (Throwable ex) {
      // Make sure you log the exception, as it might be swallowed
      System.err.println("Initial SessionFactory creation failed." + ex);
      throw new ExceptionInInitializerError(ex);
    }
  }
 
  public static SessionFactory getSessionFactory() {
    return sessionFactory;
  }
}


Hibernate 是否真能讓你保持資料庫的可移植性,那要看你資料庫間的 SQL 實作有多大的差異。
這差異可能比你想像來得多,SQL 包含的不只是語法、還有資料型別的差異。

光是處理聚合函式就會想要光依賴 Hibernate 來維持可移植性了。
因為語法的實作的嚴謹度不同,
會透成最後組成 SQL 的語法有很大的不同,間接影響你 HQL 的寫法。

我自己覺得 Hibernate 能處理的可移植性,是資料型態上的支援。
因為他有 Dialect 的設計,你可以不用理會資料庫到底有沒有布林型別。
像 Oracle 就沒有布林要用整數來取代,有的資料庫是有布林就直接定義成布林欄位。

另外,針對不同資料庫的最佳化,也有必要直接改成 natvie SQL,也可能直接使用資料庫內建的特異功能。
這就只能將你的 SQL 獨立至設定檔案,依情況透過 build tool (ex. ANT) 幫你選擇要用那一個資料庫的設計了。
Hibernate 設計的初衷是要讓熟悉 OOP 的程式設計師以 OO 的方式與資料庫互動,
至於是不是可以移植並不是最大的考量。

也許能這麼想:Java 即使是攜性好的,但為了效能必需以 JNI 輔助時產生的 trade off


reply to postreply to post
蝸牛角上爭何事?石火光中寄此身,隨富隨貧且歡樂,不開口笑是癡人。
my notes
話題樹型展開
人氣 標題 作者 字數 發文時間
10683 Hibernate HQL Left Join wildpeanut 579 2010-08-09 11:58
10347 Re:Hibernate HQL Left Join qrtt1 223 2010-08-09 13:08
10358 Re:Hibernate HQL Left Join wildpeanut 167 2010-08-09 13:18
10326 Re:Hibernate HQL Left Join qrtt1 535 2010-08-09 13:59
10304 Re:Hibernate HQL Left Join wildpeanut 431 2010-08-09 23:29
10509 Re:Hibernate HQL Left Join qrtt1 1951 2010-08-09 23:56
10277 Re:Hibernate HQL Left Join wildpeanut 1711 2010-08-29 19:26
» JWorld@TW »  Object Relational Mapping » Hibernate

reply to postflat modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8