【发布时间】:2017-08-05 23:23:26
【问题描述】:
我正在尝试执行以下 HQL 语句:
queryString = "select new DossierAccount(dossier,dossierAccount.accountNumber) from DossierAccount as dossierAccount join fetch dossierAccount.dossier as dossier" +
" where dossier.kycId.id != :kycId and dossierAccount.accountNumber in :accountNumbers";
这会导致org.hibernate.QueryException: query specified join fetching, but the owner of the fetched association was not present in the select list 异常。当我删除“获取”时,它可以工作。但是 DossierAccount 和 Dossier 之间的关联被指定为“惰性”,我不想更改它。但在这种特殊情况下,我需要急切地加载档案。
当我用变量“accountNumber”替换构造函数调用时,它也可以工作。但是我需要减少这里选择的属性的数量。
有没有办法通过 select 语句中的嵌入式构造函数调用来做到这一点?
还有一个问题:我还需要限制已加入档案的选定属性的数量。有没有办法做到这一点?
【问题讨论】:
-
当您删除
fetch并保持关联LAZY时会发生什么? -
相关的档案没有加载,但在这种情况下我需要它
-
未加载是什么意思,是否没有向 DossierAccount 提供值?
-
DossierAccount 已加载,但关联的 Dossier 未加载。 DossierAccount的hibernate映射中定义了Dossier的多对一关联,不是惰性的。
-
但是您没有直接使用实体,您使用的是新查询。我怀疑这会“加载”任何实体(取决于您如何定义“加载”,这是我的问题。)