首页 > 解决方案 > Hibernate 生成无效查询

问题描述

我正在使用 Spring Data @Query 注释从数据库中选择一些值。查询看起来像这样(简化)

@Query("from #{#entityName} where :myParam is null or someAttribute not in :myParam")

这应该创建等效的 SQL,如果 myParam 值为 null,则该 SQL 应该返回表中的所有记录,但是 hibernate 像这样创建 where 子句

... where :myParam = null or ...

它不返回任何东西。

我正在使用 Microsoft SQL Server 2017 (RTM)。休眠配置是这样的:

spring.datasource.driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.jpa.database-platform: org.hibernate.dialect.SQLServer2012Dialect

如何确保 Hibernate 生成正确的查询(即使用 'is' 而不是 '=')?

标签: javasql-serverhibernatespring-data-jpa

解决方案


如果不添加nativeQuery = true注释@Query,则查询必须是有效的 JPQL 查询,并且 JPA 的实现者有责任(休眠)将 JPQL 查询转换为底层数据库 SQL 方言。

nativeQuery = true您必须提供符合底层数据库方言的有效 SQL 查询。


推荐阅读