[英]Hibernate generates invalid query
我正在使用 Spring Data @Query 注释从数据库中选择一些值。 查询看起来像这样(简化)
@Query("from #{#entityName} where :myParam is null or someAttribute not in :myParam")
如果 myParam 值为空,这应该创建等效的 SQL,该 SQL 应该从表中返回所有记录,但是 hibernate 会像这样创建 where 子句
... where :myParam = null or ...
它不返回任何东西。
我正在使用 Microsoft SQL Server 2017 (RTM)。 Hibernate的配置是这样的:
spring.datasource.driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.jpa.database-platform: org.hibernate.dialect.SQLServer2012Dialect
如何确保 Hibernate 生成正确的查询(即使用“is”而不是“=”)?
既然 JPA 支持coalesce
为什么不@Query("from #{#entityName} where coalesce(someAttribute, :myParam) = :myParam)
?
如果您不将nativeQuery = true
添加到@Query
注释,则查询必须是有效的 JPQL 查询,并且 JPA 的实现者有责任(休眠)将 JPQL 查询转换为底层数据库 SQL 方言。
使用nativeQuery = true
您必须提供符合基础数据库方言的有效 SQL 查询。
如果这真的发生了,我会非常惊讶。 我的猜测是,您的@Query
注释没有被选中并且 Spring Data 使用了方法名称约定,或者您没有共享正确的查询。 无论哪种方式,如果这确实是一个休眠错误(也许您使用的是非常旧的休眠版本),您应该使用重现该问题的测试用例创建一个问题: http : //hibernate.atlassian.net
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.