TL;博士
如何在 B 集合中获取只有几个属性的单个 A 对象?
解释
我正在从事一个遗留项目,人们有一个绝妙的想法,将每一种关系映射为 EAGER。
现在,我们遇到了性能问题。
例如,我有一个 A 类,它有一个 B 对象列表。该列表已在 hibernate 中映射为一个包,并延迟加载(到目前为止,一切都很好)。问题是,B 急切地加载了整个该死的字母表:
一个.hbm.xml
<hibernate-mapping>
<class="A" table="a" lazy="false">
// properties
<bag name="listOfBs" inverse="true">
<key column="a_id" [...]>
<one-to-many class="B" />
</bag>
</hibernate-mapping>
B.hbm.xml
<hibernate-mapping>
<class="B" table="b" lazy="false">
<many-to-one name="a" class="A" column="a_id" />
// lots of other many-to-one mappings
// properties
// lots of one-to-many properties
</hibernate-mapping>
所以我只需要 B 的 4 个属性,但它会获取每个相关的对象!
为了在不破坏一切的情况下解决这个问题,我尝试使用 hql 查询来仅选择集合的几列:
"select a, b.field1, b.field2, b.field3, b.field4
from A a inner join B b where a.id = :id"
但是我需要一个唯一的结果,所以下面的查询会导致异常。