0

私はEJB3.1とJPA2を学んでいます

挿入と更新のために次のことを行っています

入れる

Common com = new Common();
com.setKeyData(keyData);
com.setKeyValue("0001");
em.persist(com);

アップデート

Common com = em.find(Common.class, pk);
com.setKeyValue("0002");

上記のコードは機能しますが、挿入と更新のために必要なのはそれだけかどうかを知りたいです。begin()、commit()など(おそらくswingアプリで使用されている)の投稿をいくつか見ました。私はJPA/ORMを初めて使用するので、上記のコードが大量のデータ負荷のあるアプリケーションに十分かどうかを知りたいのですが、不足しているものはありますか、またはデータの挿入/更新についてもっと読む/学ぶ必要があります。

EntityManagerのclose、clear、flushメソッドをいつ使用する必要がありますか。どのシナリオで使用されますか。

4

4 に答える 4

1

ほとんどの場合、コードは問題ないはずです。多くのEJB開発では、トランザクションのライフサイクルはコンテナによって処理されるため、トランザクションの開始を明示的にマークする必要はありません。

よりきめ細かい制御のために、Bean管理のトランザクションを使用することもできます。この場合、beginとcommit / rollbackを呼び出して、ライフサイクルを自分で管理する必要があります。

詳細については、以下をご覧ください。

コンテナ管理: http: //java.sun.com/j2ee/tutorial/1_3-fcs/doc/Transaction3.html Bean管理:http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/Transaction4 .html

于 2012-08-23T18:44:31.970 に答える
1

JPA で EJB を使用する場合、トランザクションを開始してコミットした後は心配する必要はありません。基礎となる Container によってすべてが行われます。EJB を使用する場合は、 @PersistentContext(name="CustDB") でアノテーションを付けるだけです。

@PersistenceContext(name="PersistentUnitName")
private EntityManager entityManager;
于 2012-08-23T18:50:43.390 に答える
1

begin/commit は、トランザクションを制御するために ( ACIDを保証するために) 使用されます (これが他の方法で行われない場合) (他の投稿を参照)。

トランザクションの使用例は次のようになります。

EntityManager em = ...
EntityTransaction tx = null;
try {
  tx = em.getTransaction();
  tx.begin();
  // your code that should be executed within the transaction
  tx.commit();
} catch(Exception ex) {
  // roll back if something failed
  if (tx != null && tx.isActive()) {
    tx.rollback();
  }
} finally {
  // make sure em is closed on commit and on rollback
  em.close();
}
于 2012-08-23T18:51:01.687 に答える
0

EntityManagerアプリケーションで管理されている場合は、閉じる必要があります。自分で(インジェクションなしで)作成したことを意味します。自分でトランザクション (または Bean Managed Transaction)を管理する場合はbegin、 , ...を使用する必要があります。ただし、通常は(コンテナー管理トランザクション) を使用するため、このメソッドは役に立ちません。トランザクションが現在開かれている場合は、どこでも使用できます。すべての管理対象エンティティを永続化コンテキストから切り離したい場合は、メソッドを使用できます。commitBMTCMTflushclear

しかし、私の答えは非常に短いので、このリンクが役立つと思います. 関連書籍にも詳しく載っています。

于 2012-08-23T18:49:10.747 に答える