2016-11-09 60 views
2

我需要增加一點點智慧的JPA EntityManager的,定製createNamedQuery。 我正在構建許多模塊的項目,其中每個模塊使用@PersistenceContext(unitName = "emModuleName")註釋其EntityManager的實例。自定義一個EntityManager

看來,我不能簡單地擴展了接口EntityManager的,但我沒有在網上找到有關此事的任何文件。

有沒有人有一個想法什麼是我的需求的最佳解決方案?

我不能延長一個具體實現,因爲該應用程序必須是獨立的JPA實現。 謝謝

+0

由於每個JPA提供者實現的EntityManager與自己的階級,既然你說你不能擴展的實現,那麼你就不能這樣做。 –

回答

1

一種方法是創建自己的實現EntityManager,將作爲真正的EnityManager包裝。攔截所需的方法(在你的情況下爲createNamedQuery),並將其他所有呼叫委託給解除對象。

創建您自己的代理攔截方法調用。然而

這兩種方式都不是微不足道的使用,你可能會喜歡它的人。

0

您可以創建一個BaseEntitymanager它提供了基本的CRUD服務和相應的DAO具有延長BaseEntityManager基實現。

BaseEntityManager:

public interface EntityManagerBase<E, K> { 
    E create(E entity); 
    void delete(E entity); 
    E update(E entity); 
} 

EntityManagerBaseImpl

public abstract class EntityManagerBaseImpl<E, K> implements 
     EntityManagerBase<E, K> { 

    private EntityManager entityManager; 

    private TransactionManager txManager; 

    private Class<E> type; 

    public E create(E entity) {  
     entityManager.persist(entity); 
     entityManager.flush(); 
     return entity; 
    } 

MyDaoImpl:

public class MyDaoImpl extends EntityManagerBaseImpl<MyDBO, Long> implements MyDao { 
//put your implementation of methods 
}