0
让我们假设我有一个名为Foo
的JPA实体,并具有String myStr
属性;JPA:无状态会话bean和管理实体
当我现在定义一个无状态会话bean是这样的:
@Stateless
@LocalBean
public class FooBean {
@PersistenceContext(unitName="foo-pu")
private EntityManager em;
public Foo getFoo(int id) {
return em.find(Foo.class,id);
}
public void changeMyStr(Foo entity) {
entity.setMyStr("fooStr");
}
}
将changeMyStr()
所做的更改成为持久化了,如果我通过之前获取的Foo
对象通过getFoo()
?
...默认情况下,StatelessSessionBean中的每个方法都发生在它自己的事务中。 – jahroy 2013-04-03 22:11:24
谢谢你这个很好解释的answere。我应该在'changeMyStr()'中调用'em.merge()'(实际上在我的具体情况下做了一些业务逻辑),还是应该使用'em.find()'来获取方法内的实体。 – Paranaix 2013-04-03 22:12:09
@Paranaix更正统的选择是在更高层实现整个事务性业务逻辑。然后这个方法将在同一个事务*中调用'getFoo(...)','changeMyStr(...)'和其他数据访问“原语”*。通过这种方式,您的实体不会分离,所有事情都可以按照意愿去做。如果由于某种原因,这是不可行的,那么使用'em.merge(...)'是一个合理的选择。 – gpeche 2013-04-03 22:29:04