如果我使用新的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,那么我会获得相同的对象(这就是我想要的)但如果实体和实体本身的数量很大,这将会影响我的性能。
是否有可能解决这个问题?