【问题标题】:How to reinitialize lazy loaded entity?如何重新初始化延迟加载的实体?
【发布时间】:2011-09-16 11:23:50
【问题描述】:
我有一个实体人:
class Person {
String name;
String phone;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
Set<Address> addresses = new HashSet<Address>();
}
当我在桌子上显示人员时,我不想加载地址。
当我打开编辑对话框时,我也想显示地址。但是我遇到了 Lazzy 加载异常(没有活动会话)。
如何重新初始化 Person 实例以加载地址?
【问题讨论】:
标签:
hibernate
lazy-loading
vaadin
【解决方案1】:
调用另一种方法,该方法将从数据库中重新加载人员及其地址:
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();
}
在单个查询中完成。