簡體   English   中英

Hibernate 生成無效查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM