java - 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' 而不是 '=')?
解决方案
如果不添加nativeQuery = true
注释@Query
,则查询必须是有效的 JPQL 查询,并且 JPA 的实现者有责任(休眠)将 JPQL 查询转换为底层数据库 SQL 方言。
nativeQuery = true
您必须提供符合底层数据库方言的有效 SQL 查询。
推荐阅读
- mongodb - 无法更改 mongodb 的 dbpath
- javascript - 用户更改 Javascript 中的选项后删除或隐藏元素
- python - Python 在 Google Colab 中“期望有一个缩进块”
- python - 如何使用 Python 格式化 Google 表格中的单元格?[AttributeError:“工作表”对象没有属性“格式”]
- java - LibGDX Array's internal array is not type safe
- amazon-web-services - 如何在不同的 cloudformation 堆栈中分离 dynamodb 表及其 GSI?
- python - 我怎样才能让 xticks 在我的 matplotlib 图上有一个每月间隔而不是每天
- python - 使用 Python boto3 从 S3 下载 Sentinel 文件
- r - 需要 R 代码绘图错误与否的帮助。马尔可夫链中的样本
- java - 使用 GSON 或 Jackson 到 POJO 的 HashMap