2014-11-14 72 views
0

鉴于简化模型:Hibernate的标准列表必须包含另一个列表

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

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

接入许可,对完全包含他的标签,没有任何问题,如果该项目有多个标签或不是每一个项目的访问。

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

回答

0

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

所以选项之一,负载总是:

public class Access { 

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

所以一对多注解告诉Hibernate来寻找标签链接到您的表标签表,始终做到这一点:FetchType.EAGER

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

如果你不想懒惰加载这个列表,你可以设置FetchType.LAZY,那么你需要做一些额外的工作,以填补这个列表。

简单的负载将填补所有的值存储:

session.get(Access.class, key); 

过滤访问列表的标签看到这样的回答:How to join two different criterias under Hibernate?

+0

这不是真的我的需要。给一个访问(比方说)10个标签。我想要所有的标签包含所有项目的所有给定的10个标签...在一个请求中,如果可能的话 – farvilain

+0

http://stackoverflow.com/questions/17385579/how-to-join-two-different-criterias-under-hibernate – Drejc

相关问题