2013-02-19 8 views
0

Я думаю, что мой тест JUnit объяснит это лучше, чем я мог бы с помощью слов!Hibernate выполняет запрос только 8 раз

@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); 
    } 
} 

Результат для этого на консоли был:

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 

Теперь позволяет увидеть исходный код!

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(); 
} 

Я еще один тест, с другим запросом

@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); 
    } 
} 

Вот результат:

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 

Так, I'm с помощью Spring Data ... Что может быть проблема ?

+2

Как вы используете ваши тесты? Я не могу поверить, что ваш первоначальный запрос был назван 'query8times' - совпадение. Приводит меня к мысли, что вы можете где-то кэшировать тестовый класс. – Perception

+0

Чтобы убедиться, сделайте надпись «Testing» + n + «times» и используйте это * n * в цикле for. –

+0

Я подозреваю, что вы используете файл класса, который был скомпилирован, прежде чем вы внесли изменения в метод 'query8times'. –

ответ

1

Разве вы не должны создавать только один EntityManager?

EntityManager entityManager = entityManagerFactory.createEntityManager(); 

Строка^должна находиться вне метода executeSQL.

0

Да, я создал только один entityManager, как сказал adarshr. Но это не проблема. Я забыл совершить сделку и закрыть диспетчер сущностей ...

Это конечный результат:

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

Вы должны разместить это как комментарий или редактировать исходный вопрос, так как это не ответ. –

 Смежные вопросы

  • Нет связанных вопросов^_^