2012-09-02 70 views
0

我有一對一的hibernate註釋映射。就像例如。hibernate如何啓動查詢?

 @Entity 
    @Table(name="person") 
    class Person{ 
     @OneToOne(mappedBy = "person", cascade = CascadeType.ALL)  
     private Passport passport; 
     ...... 
    } 

    @Entity 
    @Table(name="passport") 
    class Passport{ 
    @OneToOne 
    @JoinColumn(name = "statusid") 
    private Person person; 
    ...... 
    ..... 
    } 

這裏Person擁有和Passport是所有者。當我對person執行select操作時,爲什麼hibernate會觸發兩個查詢,即從personpassport中選擇。 根據Hibernate文檔

the owner is responsible for the association column(s) update 

回答

0

概念關係的所有者沒有連接到您的問題。正如您從文檔提示中摘錄的那樣,在持續關係時諮詢擁有方。這並不意味着關係的另一方是懶惰的。

你的用例需要的是延遲加載一對一關係。不幸的是Hibernate不支持它。解決此限制的典型方法是定義一方與一方一對一的關係,另一方面定義一對多(懶惰)的關係。

0

由於-cascad所添加的所有字段導致兩個查詢被觸發 (在一對一映射中) hibernate在此處做了什麼。它帶來了所有參考字段的數據。

1-假設您選擇一個id = 3的人;

2,那麼你將有

人finbyid按照你的DAO層語法的方法(整數PERSONID) { ......... ........ 歸還人; }

3-和對應的SQL查詢將會像

SELECT * FROM人其中id = 3;

4-冬眠這裏確實多了一個東西─

它帶來與它也是相關聯的所有護照對象。你可以做 Passport pass = person.getPassport();

現在Passport的Pass對象會有所有的列現在沒有單獨的查詢會被觸發。 。 你可以直接使用 pass.getPassportid(); pass.getPassportnumber();

等。 希望你懷疑已被清除