我已經在過去構建了一些JPA的東西,每個DAO實例使用javax.persistence.EntityManager
的實例;這是大多數例子的設置方式。JPA EntityManager靜態或實例?
public class BaseDaoThatEveryDaoExtends {
@PersistenceContext
private EntityManager entityManager;
}
我只是偶然發現了代碼,使用一個靜態javax.peristence.EntityManger
由PersistenceContext
註釋注入,建築師告訴我這不會引起問題,他們甚至從來沒有在JTA和集羣應用程序出現任何問題XA數據源:
public class BaseDaoThatEveryDaoExtends {
@PersistenceContext
private static EntityManager entityManager;
}
據我可以告訴這是一個反模式的EntityManager
持有一些狀態信息,使之靜使得這整個國家應用廣泛。這也使得這些類非常難以測試。
還有沒有其他的缺點,這樣做或者這是使用EntityManager
的標準呢?
當一個人工構造DAO的實例而不是注入並調用實例方法時,NPE也很好。所以這不是一個真正的爭論。 – BalusC 2011-12-23 22:45:12
除非您不必構建BaseDaoThatEveryDaoExtends,您只需調用BaseDaoThatEveryDaoExtends.doSomeStaticwork(),這可能導致NPE。 – 2011-12-23 22:47:35