2009-06-24 4 views
0

Правильный способ проверки запроса jpa программно. Hibernate проверяет все аннотации на основе именованных запросов для сущностей. Но как я могу вызвать эту процедуру проверки на программно построенные jpa-запросы, чтобы проверить наличие ошибок?JPA/Hibernate: проверка на основе кода запросов jpa

 
@Entity 
public class Foo { 
@Id 
public int id; 

public String name; 

} 
 
main(...) { 
    Query q = getEntityManager().createQuery("select e from " + Foo.class.getName() + " e where e.name = 'x' "); 
    // validate q here 
} 

ответ

2

не делать. Интеграция проверяет ад из вашего кода, используя реальную базу данных с той же схемой, что и ваша производственная среда.

Подумайте об этом: если вы создали неверный запрос, это ошибка программирования . Что вы собираетесь делать с информацией? Сообщите пользователю, что запрос JPA неверен? Все, что вы можете реально сделать, это зарегистрировать ошибку и сообщить пользователю «что-то плохое». Вы будете знать, что это неверно сформированный запрос, когда вы проверяете журналы позже в любом случае ...

Редактировать

Он также может быть стоит расследования createQuery() вызова путем подачи его плохих данных - документация Javadoc here предполагает, что может выбросить HibernateException, и я не уверен, что он мог бы сделать со строкой, отличной от проверки ее ...

+0

Я просто хочу проверить мои запрограммированные сгенерированные запросы, так же как и спящий режим для @namedquery. Если обнаружена ошибка, программа должна, конечно, выключиться. Где я делаю чек, здесь не вопрос, как есть. – H2000

+0

@KlausMeier - если вы посмотрите здесь: https://www.hibernate.org/hib_docs/v3/api/org/hibernate/Session.html#createQuery(java.lang.String), вы увидите, что createQuery () метод может вызвать исключение. Это может быть уже подтверждено для вас. Подайте сломанный запрос и посмотрите, что произойдет? –

0

Либо вы можете использовать createQuery, либо вам нужно поместить название своего класса при написании JPQL.

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