DAOのインスタンスごとにjavax.persistence.EntityManager
のインスタンスを使用した過去にいくつかのJPAを構築しました。これはほとんどの例が設定されている方法です。JPA EntityManagerスタティックまたはインスタンス?
public class BaseDaoThatEveryDaoExtends {
@PersistenceContext
private EntityManager entityManager;
}
私はちょうどPersistenceContext
注釈によって注入静的javax.peristence.EntityManger
を使用するコードにつまずいてきた、建築家は、これは問題ないし、彼らもJTAとANとクラスタ化されたアプリケーション内の任意の問題があったことがない私に語りましたXAデータソース:EntityManager
は、いくつかの状態情報を保持し、それが静的作ることは、全体の状態のアプリケーション広いことになり限り、私はこれを言うことができるように
public class BaseDaoThatEveryDaoExtends {
@PersistenceContext
private static EntityManager entityManager;
}
はアンチパターンです。また、これにより、クラスを非常にテストするのが難しくなります。
これには他にも欠点がありますか、これはEntityManager
を使用する標準的な方法ですか?
NPEは、手動でDAOのインスタンスを作成する代わりに手動で作成し、インスタンスメソッドをインボークするときにも、可能です。だからそれは本当の議論ではない。 – BalusC
BaseDaoThatEveryDaoExtendsを構築する必要がないことを除いて、BaseDaoThatEveryDaoExtends.doSomeStaticwork()を呼び出してNPEを呼び出すことができます。 –