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