2011-09-16 96 views
0

我有一個實體的人:如何重新初始化延遲加載的實體?

class Person { 
    String name; 
    String phone; 
    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY) 
    Set<Address> addresses = new HashSet<Address>(); 
} 

當我在顯示錶的人,我不希望加載地址。 當我打開編輯對話框時,我也想顯示地址。但我得到了Lazzy加載異常(沒有活動會話)。

如何重新初始化Person實例以加載地址?

回答

2

調用另一個方法將與他的地址一起重新從數據庫中的人:

public Person loadPersonWithAddresses(Long personId) { 
    Person p = (Person) getSession().get(Person.class, personId); 
    Hibernate.initialize(p.getAddresses()); 
    return p; 
} 

public Person loadPersonWithAddresses(Long personId) { 
    String hql = "select distinct p from Person p" 
       + " left join fetch p.addresses" 
       + " where p.d = :id"; 
    return (Person) getSession().createQuery(hql) 
           .setLong("id", personId) 
           .uniqueResult(); 
} 

做到在一個單一的查詢。