我有什么:
@Entity
public class MyEntity {
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true)
@JoinColumn(name = "myentiy_id")
private List<Address> addreses;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true)
@JoinColumn(name = "myentiy_id")
private List<Person> persons;
//....
}
public void handle() {
Session session = createNewSession();
MyEntity entity = (MyEntity) session.get(MyEntity.class, entityId);
proceed(session); // FLUSH, COMMIT, CLOSE session!
Utils.objectToJson(entity); //TROUBLES, because it can't convert to json lazy collections
}
什么问题:
问题是 session 关闭后我无法提取惰性集合。但我也不能不关闭 proceed 方法中的 session 。
多么好的解决方案(粗略的解决方案):
a) 在 session 关闭之前,强制 hibernate 拉取惰性集合
entity.getAddresses().size();
entity.getPersons().size();
....
b) 也许更优雅的方法是使用 @Fetch(FetchMode.SUBSELECT)
注释
问题:
什么是最佳实践/常见方式/更优雅的方式?意味着将我的对象转换为 JSON。
最佳答案
在 @Transactional
中使用 Hibernate.initialize()
来初始化惰性对象。
start Transaction
Hibernate.initialize(entity.getAddresses());
Hibernate.initialize(entity.getPersons());
end Transaction
现在在 Transaction 之外,您可以获取惰性对象。
entity.getAddresses().size();
entity.getPersons().size();
关于java - Hibernate:拉取所有惰性集合的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19928568/