我使用 Hibernate 5.4.32.Final,當我嘗試通過 spring 資料執行此查詢時:
@Query("select new by.urspectr.ediprov.util.dto.TwoFieldDto(o.gln, u.email) "
"from OrganizationEntity o "
"join UserEntity u on u.organization.id = o.id "
"where o.gln in (:glnList)")
List<TwoFieldDto<String, String>> findEmailListByGlnIn(List<String> glnList);
在啟動應用程式 Hibernate 時,當它到達 UserEntity 令牌時拋出 SyntexException,并給出意外的令牌。
如果我嘗試從 UserEntity 端執行查詢,則查詢編譯成功。
這個 Hibernate 版本不支持 JOIN ON Syntex 嗎?(OrganizationEntity 不包含 UserEntity 上的鏈接,但 UserEntity 有鏈接)。
uj5u.com熱心網友回復:
該@Query注釋在默認情況下它有自己的語法預計JPQL。據我所知,你不能JOIN .. ON在 JPQL 中做一些事情。我不知道你的物體之間的關聯,但它應該是這樣的:
@Query("select new by.urspectr.ediprov.util.dto.TwoFieldDto(o.gln, u.email) "
"from OrganizationEntity o "
"join o.UserEntity u "
"where o.gln in (:glnList)")
但是要讓它起作用,OrganizationEntity和之間必須存在關聯UserEntity。
作為替代方案,您始終可以使用本機查詢,您可以JOIN .. ON在本機 SQL 方言中執行以下操作:
@Query(value = "SELECT ....", nativeQuery = true)
但是,如果您確定無法使用 JPQL 執行此操作,這應該只是一個選項。
uj5u.com熱心網友回復:
你不應該JOIN ON在 HQL 中使用顯式。相反,您可以使用Implicit加入 HQL:
@Query("SELECT new by.urspectr.ediprov.util.dto.TwoFieldDto(o.gln, u.email) "
"FROM OrganizationEntity o "
"INNER JOIN UserEntity u "
"WHERE o.gln in (:glnList)")
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/386137.html
上一篇:會話變數和三星互聯網
下一篇:Cpp預定義結構?
