JPA / Hibernate:基于代码的jpa查询验证

以编程方式验证jpa查询的正确方法是什么 . Hibernate验证基于实体的所有基于注释的命名查询 . 但是,如何在编程 Build 的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)

3 years ago

别 . 集成使用与 生产环境 环境具有相同模式的真实数据库测试您的代码 .

想一想:如果你创建了一个格式错误的查询,那就是编程错误 . 你打算怎么处理这些信息?告诉用户JPA查询格式错误?您可以实际做的就是记录错误并告诉用户"something bad happened" . 无论如何,当你稍后检查日志时,你'll know it'是一个格式错误的查询...

Edit

通过提供错误的数据来调查 createQuery() 调用也是值得的 - javadoc here表明它可以抛出一个 HibernateException ,而且我不确定它可以用除了验证它之外的字符串做什么...

3 years ago

您可以使用createQuery,也可以在编写JPQL时放置类名 .