2009-02-16 64 views
0

集合中獲取單個「默認」實體我有一個具有多個電話號碼的Person實體。如何熱切地從EJB3/JPA

@OneToMany(mappedBy="person", cascade=CascadeType.ALL) 
public Set<PhoneNumberOfPerson> getPhoneNumbers() { 
    return phoneNumbers; 
} 

現在我想實現一個「獲取默認電話號碼」方法的人是熱切地提取。此默認電話號碼是電話號碼集中的電話號碼之一。有沒有辦法做到這一點?

我試圖實現這個的原因是有一個頁面上列出的這個默認電話號碼列出db中的所有人。

作爲JPA初學者最初我用下面的方法試了一下:

@Transient 
public PhoneNumberOfPerson getDefaultPhoneNumber(){ 
    if(this.getPhoneNumbers().size()==0) 
     return null; 

    return this.getPhoneNumbers().iterator().next(); 

} 

但是這當然導致了一個非常非常緩慢的上市頁。

那麼有沒有什麼辦法來定義一個瞬態屬性,從基於某些查詢的實體集合中獲取單個實體?我使用Hibernate作爲我的持久性提供者。

回答

0

最好的辦法是在PhoneNumbers表上指定一個字段,以表明它是默認號碼,然後在返回Person的查詢上執行JOIN FETCH。

select p from Person p JOIN FETCH p.phoneNumbers as ph where ph.default = true 

如果那裏是沒有******中國的人,然後使用LEFT JOIN的可能性。