【发布时间】:2014-05-12 20:39:39
【问题描述】:
我在事务性 ejb 方法中的自创对象中的 Hibernate 延迟加载实体存在问题。
@Entity
public class SampleEntity {
...
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private List<AnotherEntity> list;
...
}
EJB:
@Stateless
public class SampleEjb {
public void transactionalMethod() {
SampleEntity entity = //select entity from db
new SamplePojo().lazyLoad(entity);
}
}
POJO:
public class SamplePojo {
public void lazyLoad(SampleEntity entity) {
//there sometimes i have receiving javax.persistence.TransactionRequiredException
entity.getList().size();
}
}
有趣的是,这个问题有时会发生,有时不会。当我第一次在我的项目中遇到这种情况时,我通过将 SamplePojo 注入我的 EJB 来解决这个问题(当时认为 EJB 事务不会注入到自己创建的对象中)。但是现在我意识到我的项目中还有其他地方与我在这里发布的类似,并且注入了事务并且代码运行良好。
是否应该将事务范围包含在 EJB 方法中的用户创建对象中?我的带有实体延迟加载的代码是随机的吗? 有没有人遇到过这个问题?
【问题讨论】:
标签: hibernate jakarta-ee transactions ejb lazy-loading