我在类级注释了一个带有@Where属性的Hibernate实体。 这限制了我直接查询时加载的实体,但它似乎不适用于该类的集合。这是预期的吗?
文档不清楚:http://docs.jboss.org/hibernate/core/3.3/reference/en/html/mapping.html#mapping-declaration-class
where(可选):指定任意SQL WHERE条件 检索此类对象时使用。
听起来我觉得它适用于检索该类对象的所有情况,但我观察到这会被集合忽略。
(更新:我提出了https://hibernate.atlassian.net/browse/HHH-6781来跟踪文档问题。)
答案 0 :(得分:1)
@在使用" getAll"时,类级别将忽略不需要的实例。或者" loadAll"。在课堂上拥有@Where不会"级联"申请该实体的馆藏。
@Where在集合属性级别 公共课PuppySeller {
@Where(clause = "status='FOR_SALE'")
public Set<Puppy> getPuppiesForSale() {}
将确保您选择&#34; PuppySeller&#34;来自DB,&#34; puppiesForSale&#34;将仅由小狗填充&#34; FOR_SALE&#34;状态。
但是,要非常谨慎,因为它只适用于第一级集合。我的意思是,说你有一只小狗,你想让同一卖家出售所有的小狗。您可以执行类似&#34; myPuppy.getPuppySeller()。getPuppiesForSale()&#34;。但是,如果你这样做,你将最终得到属于puppySeller的所有小狗,无论其状态如何,包括所有出售的小狗#34; SOLD&#34;或&#34; NEWBORN&#34;等