Java Hibernate只执行查询8次
我认为我的JUnit测试将比我用文字更好地解释这一点Java Hibernate只执行查询8次,java,hibernate,spring-data-jpa,Java,Hibernate,Spring Data Jpa,我认为我的JUnit测试将比我用文字更好地解释这一点 @Test public void query8times(){ for(int i=0; i<15; i++){ ProspectoRadarQueryBuilder prqb = new ProspectoRadarQueryBuilder("jardeu"); List<Object[]> prospectosNotas = (List<Object[]>)
@Test
public void query8times(){
for(int i=0; i<15; i++){
ProspectoRadarQueryBuilder prqb = new ProspectoRadarQueryBuilder("jardeu");
List<Object[]> prospectosNotas = (List<Object[]>) genericFilterDao.executeSQL(prqb.buildQuery());
System.out.println("------------------------------------- "+i);
}
}
现在让我们看看源代码
public List<?> executeSQL(String sql) {
EntityManager entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
Session hibernateSession = entityManager.unwrap(Session.class);
Query q = hibernateSession.createSQLQuery(sql);
return q.list();
}
所以,我使用的是Spring数据。。。有什么问题吗?您不应该只创建一个EntityManager吗
EntityManager entityManager = entityManagerFactory.createEntityManager();
^line应该在executeSQL方法之外。是的,正如adarshr所说,我只创建了一个entityManager。但这不是问题所在。 我忘记提交事务并关闭实体管理器 这是最终结果:
public List<?> executeSQL(String sql) {
EntityManager entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
Session hibernateSession = entityManager.unwrap(Session.class);
Query q = hibernateSession.createSQLQuery(sql);
List<?> list = q.list();
entityManager.getTransaction().commit();
entityManager.close();
return list;
}
公共列表执行sql(字符串sql){
EntityManager EntityManager=EntityManager工厂。createEntityManager();
entityManager.getTransaction().begin();
Session hibernateSession=entityManager.unwrap(Session.class);
QueryQ=hibernateSession.createSQLQuery(sql);
List=q.List();
entityManager.getTransaction().commit();
entityManager.close();
退货清单;
}
您是如何运行测试的?我不敢相信您最初的查询被命名为
query8times
是巧合。这让我相信您可能在某个地方缓存了一个测试类。为了确保这一点,请让它打印“Testing”+n+“times”并在for循环中使用该n。我怀疑您使用的类文件是在更改query8times
方法之前编译的。当您使用eclipse时,可能会出现这种情况,并且自动构建被关闭。您应该将其作为注释或对原始问题的编辑发布,因为这不是答案。
Hibernate: select * from com_campo
------------------------------------- 0
Hibernate: select * from com_campo
------------------------------------- 1
Hibernate: select * from com_campo
------------------------------------- 2
Hibernate: select * from com_campo
------------------------------------- 3
Hibernate: select * from com_campo
------------------------------------- 4
Hibernate: select * from com_campo
------------------------------------- 5
Hibernate: select * from com_campo
------------------------------------- 6
Hibernate: select * from com_campo
------------------------------------- 7
EntityManager entityManager = entityManagerFactory.createEntityManager();
public List<?> executeSQL(String sql) {
EntityManager entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
Session hibernateSession = entityManager.unwrap(Session.class);
Query q = hibernateSession.createSQLQuery(sql);
List<?> list = q.list();
entityManager.getTransaction().commit();
entityManager.close();
return list;
}