我有一个实体人:
class Person {
String name;
String phone;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
Set<Address> addresses = new HashSet<Address>();
}
当我在桌子上显示人员时,我不想加载地址。 当我打开编辑对话框时,我也想显示地址。但是我得到了Lazzy加载异常(没有活动会话)。
如何重新初始化Person实例以加载地址?
答案 0 :(得分: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();
}
在单个查询中执行此操作。