我需要向JPA EntityManager添加一点智能,自定义createNamedQuery
。
我在许多模块的项目构建中工作,其中每个模块使用@PersistenceContext(unitName = "emModuleName")
注释其EntityManager实例。
似乎我不能简单地扩展接口EntityManager,但我在网上找不到任何关于此事的文档。
有没有人知道什么是满足我需求的最佳解决方案?
我无法扩展一个特定的实现,因为应用程序必须独立于JPA实现。 感谢
答案 0 :(得分:1)
一种方法是创建自己的EntityManager
实现,它将充当真实EnityManager
的包装器。拦截所需的方法(在您的情况下为createNamedQuery
),并委托对underyling对象的每次其他调用。
OR
创建自己的代理以拦截方法调用。
然而,这两种方式并不像你希望的那样微不足道。
答案 1 :(得分: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
}