如何用Hibernate注释有条件地映射集合



如果我有一个类结构,看起来像下面(删除注释):

public class Person {
  String store;
  Swatch swatch;
  Collection<Paint> paints;
}
public class Swatch {
  String color;
}
public class Paint {
  String color;
  String store;
}

Store永远不会为空,它是Person和Paint之间使用的键。目标是匹配所有与Swatch具有相同颜色的Paint记录以及与Person相同的存储。但是,Swatch可能为空,或者它的color属性可能为空(在这两种情况下都返回与Person具有相同存储的所有油漆)。

是否有基于JPA或Hibernate的注释将在油漆集合上构造此查询?

我的结论是,这对于Hibernate注释来说要么是不可能的,要么可能只是不太明显。

我的解决方案相当hackish:在Person上,我有一个瞬态注释方法,它以编程方式过滤绘画。不太理想,因为它可能会强制执行额外的查询来获取Swatch实体。

我不会把这个标记为正确的,因为我认为Vineet Reynolds创建查询的答案在我提出的情况下可能是最合理的。然而,在我的实际场景中,查询更难实现,因为我认为未提及的因素与我的示例无关,提及它们会增加显着的复杂性。

最新更新