我在类级别用@Where属性注释了一个Hibernate实体。
这限制了我直接查询实体时要加载的实体,但似乎不适用于该类的集合。这是可以预期的吗?
文档尚不清楚:http://docs.jboss.org/hibernate/core/3.3/reference/en/html/mapping.html#mapping-declaration-class
其中(可选):指定要使用的任意SQL WHERE条件
在检索此类的对象时使用。
在我看来,这听起来像适用于检索该类对象的所有情况,但是我发现对于集合来说,这被忽略了。
(更新:我提出了https://hibernate.atlassian.net/browse/HHH-6781来跟踪文档问题。)
最佳答案
使用“getAll”或“loadAll”时,@ Where在类级别将省略不需要的实例。在类级别具有@Where不会“级联”应用于该实体上的集合。
@在集合属性级别
public 类PuppySeller {
@Where(clause = "status='FOR_SALE'")
public Set<Puppy> getPuppiesForSale() {}
将确保您从数据库中选择“PuppySeller”时,“puppiesForSale”将仅由状态为“FOR_SALE”的幼犬填充。
但是,请务必谨慎,因为它仅适用于第一级收藏。我的意思是说您有一只小狗,并且您想让同一位卖家出售所有小狗。您可能会执行类似“myPuppy.getPuppySeller()。getPuppiesForSale()”的操作。但是,如果这样做,最终将导致所有不分状态的,属于uppySeller的幼犬,包括所有“已出售”或“NEWBORN”的幼犬,等等。