Hibernate条件列表必须包含另一个列表

时间:2014-11-14 11:41:56

标签: java sql hibernate

鉴于简化模型:

public class Access {
  private Set<Tag> tags;
}

public class Item {
  private Set<Tag> tags;
}

访问权限授予对完全包含其标记的每个项目的访问权限,如果该项目包含更多标记,则没有问题。

但我不知道如何为此创建一个hibernate条件查询。 你能帮帮我吗?

1 个答案:

答案 0 :(得分:0)

你实际上不需要做任何事情,然后告诉Hibernate总是在你的实体上加载它。

所以选项一,总是加载:

public class Access {

        @OneToMany(cascade = {CascadeType.ALL}, orphanRemoval = true, targetEntity = Tag.class, fetch = FetchType.EAGER)
        @JoinColumn(nullable = true)
        protected Set<Tag> tags;
    }

因此 OneToMany 注释告诉Hibernate在链接到您的表的Tag表中查找标记,并始终执行此操作:FetchType.EAGER

实际上,Hibernate将在Tag表中创建两个带有外键的表。

如果您懒得加载此列表,可以设置FetchType.LAZY,然后您需要做一些额外的工作才能填写此列表。

一个简单的加载将填充存储的所有值:

session.get(Access.class, key);

按标签过滤访问列表,请参阅以下答案:How to join two different criterias under Hibernate?