自定义EntityManager

时间:2016-11-09 14:59:36

标签: java hibernate jpa

我需要向JPA EntityManager添加一点智能,自定义createNamedQuery。 我在许多模块的项目构建中工作,其中每个模块使用@PersistenceContext(unitName = "emModuleName")注释其EntityManager实例。

似乎我不能简单地扩展接口EntityManager,但我在网上找不到任何关于此事的文档。

有没有人知道什么是满足我需求的最佳解决方案?

我无法扩展一个特定的实现,因为应用程序必须独立于JPA实现。 感谢

2 个答案:

答案 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
}