0

プロパティで呼び出さFooれた JPA エンティティがあると仮定しましょう。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()に渡すと保持されますか?FoogetFoo()

4

1 に答える 1

4

getFoo(...)との呼び出しがchangeMyStr(...)同じトランザクション内で行われている限りFoo、そのトランザクションがコミットされていれば、インスタンスへの変更は永続化されます。通常、トランザクションを終了すると、エンティティは切り離されます。そのためgetFoo(...)、あるトランザクションとchangeMyStr(...)別のトランザクションで呼び出した場合、内部で行われたchangeMyStr(...)変更 (および元のトランザクションの外部で行われたその他の変更) は保持されません。

拡張永続コンテキストを使用すると、元のトランザクションを離れるときにエンティティが切り離されることはありませんが、これはかなり珍しいケースです。詳細については、この記事またはこの記事を参照してください。

于 2013-04-03T22:06:48.967 に答える