JPA / Hibernate避免实体的多个实例

时间:2017-09-19 20:42:52

标签: java hibernate jpa

如果我使用新的EntityManager / Persistence Context从数据库加载实体,我正在使用带有Hibernate的JPA并遇到一个问题,即拥有一个实体的多个实例。

我发现的解决方法是使用相同的持久性上下文来存储和加载实体。但是我在这里遇到了这个实体被管理的问题,这将导致我的性能下降。所以我需要(最多)我的实体的一个实例,这个实体不应该被管理。

这是一个示例代码:

public static void add(Object o){
     emFactory = Persistence.createEntityManagerFactory("unit");
     entityManager = emFactory.createEntityManager();
     entityManager.getTransaction().begin();
     entityManager.persist(o);
     entityManager.getTransaction().commit();
     entityManager.close();
     emFactory.close();
}

public static List<Object> getAllObjects(String nameOfClass){
    List<Object> objList =  entityManager.createQuery("SELECT i FROM " + nameOfClass + " i").getResultList();
    return objList;
}

public static void main(String[] args){
    Example s = new Example();
    add(s);
    List<Object> objList = getAllObjects("Example");
}

我列表中的对象与我存储的对象不同。如果我在每次插入后都不会关闭entityManager,那么我会获得相同的对象(这就是我想要的)但如果实体和实体本身的数量很大,这将会影响我的性能。

是否有可能解决这个问题?

0 个答案:

没有答案