【问题标题】:JPQL not giving resultsJPQL 没有给出结果
【发布时间】:2014-03-12 08:24:34
【问题描述】:

在我的应用程序中,我使用 JPA(使用 Hibernate 作为 JPA 提供程序)访问 DB。当我尝试运行查询时,系统为我提供了空的结果列表。但是当我运行相同查询的 SQL 表示(取自日志)时,它运行良好并为我提供了正确的结果。

有人可以帮我理解这里可能出现的问题吗?

【问题讨论】:

  • 您可以让 JPA 记录其生成的 SQL 以验证它确实在运行相同的查询。对于 Hibernate,您将使用 <property name = "hibernate.show_sql" value = "true" />。此外,双重/三重检查您的应用正在查询与您手动查询相同的数据库。
  • 我通过将 hibernate.show_sql 设置为 true 获得了 SQL 字符串。它运行良好,给了我想要的结果。另外,我很确定我正在访问同一个数据库,因为我正在使用自己的用户访问数据库,并且我没有在任何其他数据库上创建我的用户 :-)
  • 我会更进一步:尝试设置 log4jdbc 以查看填充了所有参数的 100% 保证正确的 SQL 查询。在基础上,它将是一个普通的 JDBC 查询数据库,因此不可能在两个不同的环境中运行相同的查询得到不同的结果集。

标签: java hibernate jpa jpa-2.0 spring-data


【解决方案1】:

问题可能出在参数值上。您是否使用任何需要提供者进行推断的类型参数(如枚举)?我见过一个复杂的 JPQL 查询,Hibernate 3.3 无法推断出实体属性的枚举类型(数字或字符串),因为实体属性没有使用查询中的实体别名(entityAttribute 代替别名.entityAttribute)。枚举被设置为其序列化形式的参数。就像@Gimby 所说,您可以检查完整的 Hibernate 日志以查看设置为参数的实际值是什么。

【讨论】:

  • 非常感谢,问题出在参数值上,我的下拉值中有一个空格,因此 jquery 只读取了一半的值。我尝试了 p6spy 并得到了答案。再次感谢您。
猜你喜欢
  • 2017-09-19
  • 2018-11-30
  • 1970-01-01
  • 1970-01-01
  • 2013-07-13
  • 1970-01-01
  • 1970-01-01
  • 2020-06-30
  • 2023-03-16
相关资源
最近更新 更多