我正在将 Eclipselink 应用程序转换为使用与 JBoss 6 捆绑的 Hibernate 3.6,因此需要修改延迟加载的完成方式。这不是我第一次使用休眠。
但是,似乎我的集合在合并完成后变得未初始化。我不记得以前见过这种行为。例如:
Entity entity = entityDAO.getEntity(id);
System.out.println(entity.getMyCollection().size()); // OK, no exception
entity = entityDAO.update(entity);
System.out.println(entity.getMyCollection().size()); // Throws LazyInitializationException
EntityDAO 片段:
public Entity getEntity(Long id){
Entity e = entityManager.find(Entity.class, id);
Hibernate.initialize(e.getMyCollection());
return e;
}
public Entity update(Entity entity){
return entityManager.merge(entity);
}
实体片段:
@OneToMany(mappedBy="entity", cascade=CascadeType.ALL, orphanRemoval=true)
private List<AnotherEntity> myCollection = new ArrayList<AnotherEntity>();
这真的是预期的行为吗?hibernate 在合并期间会丢弃数据似乎很奇怪..