首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate仅执行查询8次

Hibernate仅执行查询8次
EN

Stack Overflow用户
提问于 2013-02-19 21:06:50
回答 2查看 118关注 0票数 0

我认为我的JUnit测试将比我的文字更好地解释这一点!

代码语言:javascript
复制
    @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);
    }
}

在控制台上的结果是:

代码语言:javascript
复制
Hibernate:   SELECT * FROM   (   select         p.id,           comparestrings('jardeu', pc.valor) as nota   from           com_prospecto p         inner join com_prospecto_campo pc ON (p.id = pc.id_prospecto)           inner join com_campo c ON (pc.id_campo = c.id AND c.flag_nome = true)    ) as subQuery   where          nota is not null            AND         nota > 0.35  order by           nota desc;
------------------------------------- 0
Hibernate:   SELECT * FROM   (   select         p.id,           comparestrings('jardeu', pc.valor) as nota   from           com_prospecto p         inner join com_prospecto_campo pc ON (p.id = pc.id_prospecto)           inner join com_campo c ON (pc.id_campo = c.id AND c.flag_nome = true)    ) as subQuery   where          nota is not null            AND         nota > 0.35  order by           nota desc;
------------------------------------- 1
Hibernate:   SELECT * FROM   (   select         p.id,           comparestrings('jardeu', pc.valor) as nota   from           com_prospecto p         inner join com_prospecto_campo pc ON (p.id = pc.id_prospecto)           inner join com_campo c ON (pc.id_campo = c.id AND c.flag_nome = true)    ) as subQuery   where          nota is not null            AND         nota > 0.35  order by           nota desc;
------------------------------------- 2
Hibernate:   SELECT * FROM   (   select         p.id,           comparestrings('jardeu', pc.valor) as nota   from           com_prospecto p         inner join com_prospecto_campo pc ON (p.id = pc.id_prospecto)           inner join com_campo c ON (pc.id_campo = c.id AND c.flag_nome = true)    ) as subQuery   where          nota is not null            AND         nota > 0.35  order by           nota desc;
------------------------------------- 3
Hibernate:   SELECT * FROM   (   select         p.id,           comparestrings('jardeu', pc.valor) as nota   from           com_prospecto p         inner join com_prospecto_campo pc ON (p.id = pc.id_prospecto)           inner join com_campo c ON (pc.id_campo = c.id AND c.flag_nome = true)    ) as subQuery   where          nota is not null            AND         nota > 0.35  order by           nota desc;
------------------------------------- 4
Hibernate:   SELECT * FROM   (   select         p.id,           comparestrings('jardeu', pc.valor) as nota   from           com_prospecto p         inner join com_prospecto_campo pc ON (p.id = pc.id_prospecto)           inner join com_campo c ON (pc.id_campo = c.id AND c.flag_nome = true)    ) as subQuery   where          nota is not null            AND         nota > 0.35  order by           nota desc;
------------------------------------- 5
Hibernate:   SELECT * FROM   (   select         p.id,           comparestrings('jardeu', pc.valor) as nota   from           com_prospecto p         inner join com_prospecto_campo pc ON (p.id = pc.id_prospecto)           inner join com_campo c ON (pc.id_campo = c.id AND c.flag_nome = true)    ) as subQuery   where          nota is not null            AND         nota > 0.35  order by           nota desc;
------------------------------------- 6
Hibernate:   SELECT * FROM   (   select         p.id,           comparestrings('jardeu', pc.valor) as nota   from           com_prospecto p         inner join com_prospecto_campo pc ON (p.id = pc.id_prospecto)           inner join com_campo c ON (pc.id_campo = c.id AND c.flag_nome = true)    ) as subQuery   where          nota is not null            AND         nota > 0.35  order by           nota desc;
------------------------------------- 7

现在让我们看一下源代码!

代码语言:javascript
复制
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();
}

我用另一个查询做了另一个测试

代码语言:javascript
复制
@Test
public void anotherQuery(){

    for(int i=0; i<15; i++){
        List<Object[]> prospectosNotas = (List<Object[]>) genericFilterDao.executeSQL("select * from com_campo");   
        System.out.println("------------------------------------- "+i);
    }
}

结果如下:

代码语言:javascript
复制
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

所以,我使用的是Spring Data...可能的问题是什么?

EN

回答 2

Stack Overflow用户

发布于 2013-02-19 21:10:06

您不应该只创建一个EntityManager吗?

代码语言:javascript
复制
EntityManager entityManager = entityManagerFactory.createEntityManager();

^行应该在executeSQL方法之外。

票数 1
EN

Stack Overflow用户

发布于 2013-02-19 21:15:51

是的,正如adarshr所说,我只创建了一个entityManager。但这不是问题所在。我忘记提交事务并关闭实体管理器...

这是最终结果:

代码语言:javascript
复制
 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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14958283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档