Hibernate 如何重新初始化延迟加载的实体?

Hibernate 如何重新初始化延迟加载的实体?,hibernate,lazy-loading,vaadin,Hibernate,Lazy Loading,Vaadin,我有一个实体人: class Person { String name; String phone; @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY) Set<Address> addresses = new HashSet<Address>(); } 班级人员{ 字符串名; 字符串电话; @OneToMany(cascade=CascadeType.ALL,fetch=Fetch

我有一个实体人:

class Person {
  String name;
  String phone;
  @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
  Set<Address> addresses = new HashSet<Address>();
}
班级人员{
字符串名;
字符串电话;
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY)
Set addresses=新的HashSet();
}
当我在表中显示人员时,我不想加载地址。 当我打开编辑对话框时,我也想显示地址。但我遇到了Lazzy加载异常(没有活动会话)


如何重新初始化Person实例以加载地址?

调用另一个方法,该方法将从数据库中重新加载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();
}