Hibernate快速入門

1.hibernate.cfg.xml Hibernate配置文件

可以使用XML或者是annotation配置持久類.

 

2. 使用XML配置持久類mapping

(1) User.hdb.xml

(2)UserIdCard.hbm.xml

(3) Address.hbm.xml

(4) Message.hbm.xml

 

3. POJO

Address.java

 

Message.java

 

 

User.java

 

UserIdCard.java

 

TestHibernate.java

 

4. 注意事項.

(1) User <-> UserIdCard 是OneToOne, XML配置lazy沒有lazy="true", annotation雖然fetch=FetchType.LAZY, 其實不生效的, load User對象的時候一般hibernate會主動load UserIdCard對象, 使用left outter join.

這裏使用的是公用主鍵, 使用外鍵配置文檔有例子(XML註釋部分)。

注意使用User user = (user) session.createQuery().uniqueResult(); 和session.load(User.class, "userIDxxx");生成的SQL, 注意調優, fetch join, outter join等. 

Annotation配置的UserIdCard.user不寫lazy的話, load User by ID 默認會User left join UserIdCard left join User, 有點奇怪?

 

(2) User <-> Address OneToMany and ManyToOne,  XML配<many-to-one lazy沒有true, 不配置lazy, load Address的時候不會去load User, annotation配置@ManyToOne的時候不加lazy的話會自動load User, 有點不一樣.

 

(3)<many-to-many> 和@ManyToMany就inverse="true"的一方不去維護關聯表UserMessage更新, 在這裏User.setMessages()之後session會更新UserMessage表, 但是Message.setUser()後不會更新. 雙向的關聯時候爲了避免一些表的鍵的衝突, 甚至是減少生成的SQL.

 

(4) Hibernate entity/annotation reference和hibernate reference有關於mapping的更詳細全面配置說明.

(5) 這裏都是雙向關聯, 根據應用設置關聯, lazy, fetch 方式.

(6) Hibernate是持久層的一種選擇方案, 符合關係型數據庫設計準則, 穩定成熟的一個方案, 能夠較好解決大多數問題 但是它存在緩存, 對於多個應用更新採訪同一服務器, 或者是 以爲數據庫爲中心的業務開發(使用存儲過程等) 應注意緩存屏蔽; 動態表,  對於現有一些系統(使用JDBC等)升級, 要謹慎設置使用.

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章