假设我有一个具有String myStr属性的名为Foo的JPA实体;
当我现在像这样定义一个无状态会话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");
}
}如果我通过getFoo()传递以前获取的Foo对象,那么在changeMyStr()中所做的更改会持久化吗
发布于 2013-04-04 06:06:49
只要您对getFoo(...)和changeMyStr(...)的调用是在同一事务内进行的,那么对Foo实例的更改就应该成为持久化的,前提是该事务已经提交。实体通常会在您离开事务后被分离,因此,如果您在一个事务中调用getFoo(...),而在另一个事务中调用changeMyStr(...),则在changeMyStr(...)中所做的更改(以及在原始事务之外所做的任何其他更改)将不会持久化。
如果使用extended persistence context,实体在离开原始事务时不会被分离,但这是一个相当不寻常的情况。有关更多详细信息,请阅读this article或this one。
https://stackoverflow.com/questions/15798783
复制相似问题