鉴于简化模型:
public class Access {
private Set<Tag> tags;
}
public class Item {
private Set<Tag> tags;
}
访问权限授予对完全包含其标记的每个项目的访问权限,如果该项目包含更多标记,则没有问题。
但我不知道如何为此创建一个hibernate条件查询。 你能帮帮我吗?
答案 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?