【问题标题】:JPA/Hibernate: code based validation of jpa queriesJPA/Hibernate:基于代码的 jpa 查询验证
【发布时间】:2010-11-05 11:27:33
【问题描述】:

以编程方式验证 jpa 查询的正确方法是什么。 Hibernate 验证所有基于注解的实体命名查询。但是如何在以编程方式构建的 jpa 查询上调用此验证例程来检查错误?

@实体 公共类 Foo { @ID 公共 int id; 公共字符串名称; } 主要的(...) { 查询 q = getEntityManager().createQuery("select e from " + Foo.class.getName() + " e where e.name = 'x' "); // 在这里验证 q }

【问题讨论】:

    标签: java hibernate jpa hql


    【解决方案1】:

    不要。使用与生产环境具有相同架构的真实数据库对代码进行集成测试。

    想一想:如果您创建了一个格式错误的查询,那是一个编程错误。你打算如何处理这些信息?告诉用户 JPA 查询格式不正确?您实际上所能做的就是记录错误并告诉用户“发生了不好的事情”。无论如何,当您稍后检查日志时,您就会知道这是一个格式错误的查询...

    编辑

    通过提供错误数据来调查 createQuery() 调用可能也值得调查 - javadoc here 建议它可以抛出 HibernateException,我不确定它可以用除字符串以外的字符串做什么验证它...

    【讨论】:

    • 我只想验证我以编程方式生成的查询,就像 hibernate 为 @namedquery 所做的那样。如果发现错误,程序当然必须关闭。我在哪里做检查不是这里的问题,如何是。
    • @KlausMeier - 如果你看这里:hibernate.org/hib_docs/v3/api/org/hibernate/…,你会看到 createQuery() 方法可以抛出异常。它很可能已经在为您验证。输入一个损坏的查询,看看会发生什么?
    【解决方案2】:

    您可以使用 createQuery,或者您需要在编写 JPQL 时输入您的类名。

    【讨论】:

      猜你喜欢
      • 2012-02-16
      • 2015-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-18
      • 2018-03-17
      相关资源
      最近更新 更多