我所拥有的:
@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
}
问题:
问题是当会话关闭后,我无法提取懒加载的集合。但我也不能在proceed方法中不关闭会话。
解决方案(粗略解决方案):
a) 在会话关闭之前,强制Hibernate提取懒加载的集合。
entity.getAddresses().size();
entity.getPersons().size();
b) 更加优雅的方式可能是使用@Fetch(FetchMode.SUBSELECT)
注解。
问题:
将我的对象转换为JSON,有什么最佳实践/常见方法/更加优雅的方式吗?