JPA/Переход в спящий режим:проверка запросов 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 }
Решение
Не надо.Полностью протестируйте свой код на интеграцию, используя реальную базу данных с той же схемой, что и ваша производственная среда.
Подумай об этом:если вы создаете неверно сформированный запрос, это ошибка в программировании.Что вы собираетесь делать с этой информацией?Сообщить пользователю, что запрос JPA неверно сформирован?Все, что вы реально можете сделать, это зарегистрировать ошибку и сообщить пользователю "произошло что-то плохое".В любом случае, вы поймете, что это неверно сформированный запрос, когда позже проверите журналы...
Редактировать
Возможно, также стоило бы исследовать createQuery()
вызывайте, передавая ему неверные данные - javadoc здесь предполагает, что он может выбросить HibernateException
, и я не уверен, что он мог бы сделать со строкой, кроме как подтвердить ее...
Другие советы
Либо вы можете использовать createQuery, либо вам нужно указать имя своего класса при написании JPQL.