Hibernate多層的單向1對多關係的查詢

2021-04-28 06:03:37 字數 1135 閱讀 3411

在使用hibernate時,如果碰到多層的1對多關係,處理不當的話會導致查詢時產生大量的sql語句。比如有三個持久化物件,關係如下:

學校(school) --1對多-->  教室(classroom) --1對多--> 座位(roomseat)

假如乙個學校有40間教室,乙個教室有30個座位,當要查詢出乙個完整的school物件,使用hibernate的自動載入模式,就會產生大量的sql語句。當執行:

from school where school_id = ?

會產生40條sql查詢語句:

1條 select * from school where school_id  = ?

2條 select * from classroom where school_id  = ?

3-42條

select * from roomseat where classroom_id= 1

select * from roomseat where classroom_id= 2

..............

select * from roomseat where classroom_id= 40

產生怎麼多sql查詢語句明顯效能不對。

使用1對多的多層關係,必然回導致查詢時出現大量的sql語句.hibernate的文件建議多對1代替1對多。

網上有人提出,去掉1對多的關係.但是畢竟物件業務上有關係存在,刪除了關係那就不倫不類了.

我的解決方法是:首先要將1對多關係修改為多對1關係。 將三個物件關係修改為單向多對1,然後手工去維護 1對多 的關係。修改後關係如下:

座位(roomseat) --多對1-->  教室(classroom) --多對1-->  學校(school)

當要查詢乙個完整的學校物件時,執行:

select roomseat.classroom as room, roomseat as seat where room.school_id = ?

room.getroowseats().add(seat)

select classroom.school as school, classroom as room where room.school_id = ?

school.getclassroom().add(room)

Hibernate 基於主鍵的單向1 1

一直不理解這個.試了試乙個例子.比如乙個user有乙個name,user可以getname name不能得到user。user中除了name屬性外還有乙個id int 屬性做為表示。name中只有乙個name屬性 string user.hbm.xml設定主鍵的時候 name 然後執行的時候會報 i...

Hibernate關係對映 單向關聯XML

多對一關係 在一的一端配置set name必須,key column必須,one to many必須。在多的一端配置many to one name,column必須 property 當column不寫是,預設列名與name相同。type也可省略,由hibernate自動匹配 1 單向 many ...

hibernate 單向一對多對映

好久沒用j2ee開發呢,昨天寫呢乙個hibernate的對映,幾次出現異常,翻呢一遍書熟悉呢一下才搞定,這裡把幾種常用的對映放上來,希望大家方便查詢 一 hibernate 單向一對多對映 乙個team 對應多個student 一 hibernate.cfg.xml public hibernate...