0

假设我有一个使用属性调用的 JPAFoo实体String myStr

当我现在像这样定义无状态会话 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()吗?

4

1 回答 1

4

只要您对getFoo(...)和的调用changeMyStr(...)是在同一个事务中进行的Foo,如果该事务已提交,对实例的更改就应该保持不变。一旦您离开事务,实体通常会分离,因此如果您getFoo(...)在一个事务和changeMyStr(...)另一个事务中调用,则内部所做的更改changeMyStr(...)(以及在原始事务之外进行的任何其他更改)将不会被持久化。

如果您使用扩展的持久性上下文,实体在离开原始事务时不会分离,但这是一种相当不寻常的情况。阅读这篇文章这篇文章了解更多详情。

于 2013-04-03T22:06:48.967 回答