2011-09-16 10 views
0

私は、エンティティパーソン持っている:私はテーブルに人物を表示すると遅延読み込みエンティティを再初期化する方法は?

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

私はアドレスをロードする必要はありませんが。 編集ダイアログを開くと、アドレスも表示する必要があります。しかし、私はLazzyのロードの例外を持っています(アクティブなセッションはありません)。

Personインスタンスを再初期化してアドレスをロードするにはどうすればよいですか?単一のクエリでそれを行うには

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(); 
} 

答えて

2

コール彼のアドレスとともに、データベースから人をリロードします別の方法。

関連する問題