Hibernate @OneToMany和唯一约束条件

10

我正在使用Hibernate存储有关文章引用的信息。为了表达两篇文章之间的关系,我以这种方式注释了我的类。

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinTable(name = "CITATIONS")
private Set<Article> citingArticles = new HashSet<Article>();

很不幸,这是在引用文章中使用了唯一约束条件进行翻译,这意味着我只能将一篇文章引用到另一篇文章。

当然,这不是我想要的,我该如何删除唯一约束条件呢?

2个回答

9
如果你有一个多对多的关系,你需要用@ManyToMany来建模:
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY) 
@JoinTable(name = "CITATIONS") 
private Set<Article> citingArticles = new HashSet<Article>(); 

4
什么?不……他想要一个东西来引用许多其他东西。在联接表中,这将是用于一个东西的一列(无论此“文章集合”属于哪个类别),以及用于许多东西的另一非唯一列(即“文章”)。他不想要多对多,只想要一对多,并且这不应该在许多列上产生唯一约束。 - Matt
1
@MattPowell 我有一个类似的问题,一个实体要引用第二个实体的多个实例,但它仍然会放置唯一约束,并且我相信这是一对多的关系,那么你认为解决方案是什么? - Aria

0
你看过https://hibernate.atlassian.net/browse/HHH-3410上的讨论吗?
似乎在Hibernate上下文中,@OneToMany有不同的理解。
假设你有一个Article实体,它可以有许多标签。同时,每个Article也可以有许多评论。
你可以定义如下内容:
Class Article 

    @OneToMany
    List<Tags>

    @OneToMany
    List<Tags>

Comments 表的角度来看。您不会将一个 Comment 关联到多个 Article。逻辑上是不正确的。因此,在这里生成唯一约束似乎是正确的。

现在从 Tags 表的角度来看。一个 Tag 可以分配给多个 Articles,这是正确的。因此,这里的唯一约束会产生问题,需要更改为 @ManyToMany


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接