Java JPA:在m:n关系中,哪一方应该是拥有方?
比如说,我有两个实体:Java JPA:在m:n关系中,哪一方应该是拥有方?,java,orm,jpa,many-to-many,Java,Orm,Jpa,Many To Many,比如说,我有两个实体:文章和标签(就像在一个典型的博客中)。每一篇文章可以有很多标签,每个标签可以被很多文章使用,所以这是一个经典的m:n关系 我需要用JPA指定一个拥有方。但哪一方应该是拥有方?文章不依赖于某个标签,反之亦然。是否有经验法则来确定哪一方应该是拥有方?在MHO中,这是一个典型的情况,其中需要一个@manytomy关系 如果使用联接表,则可以在文章类中包含类似的内容 @ManyToMany @JoinTable(name="TAG_ARTICLE", joinCol
文章
和标签
(就像在一个典型的博客中)。每一篇文章可以有很多标签,每个标签可以被很多文章使用,所以这是一个经典的m:n关系
我需要用JPA指定一个拥有方。但哪一方应该是拥有方?文章不依赖于某个标签,反之亦然。是否有经验法则来确定哪一方应该是拥有方?在MHO中,这是一个典型的情况,其中需要一个
@manytomy
关系
如果使用联接表,则可以在文章类中包含类似的内容
@ManyToMany
@JoinTable(name="TAG_ARTICLE",
joinColumns=@JoinColumn(name="ARTICLE_ID"),
inverseJoinColumns=@JoinColumn(name="TAG_ID"))
private Collection<Tag> tags;
@manytomy
@JoinTable(name=“TAG\u ARTICLE”,
joinColumns=@JoinColumn(name=“ARTICLE\u ID”),
inverseJoinColumns=@JoinColumn(name=“TAG\u ID”))
私人收藏标签;
然后在标签类中
@ManyToMany(mappedBy="tags")
private Collection<Article> articles;
@ManyToMany(mappedBy=“tags”)
私人收藏物品;
我的观点:
这取决于你的生意。哪个实体在您的业务中更重要
在您的示例中,我认为文章应该是拥有方,每个双向关系都需要JPA中的拥有方。在
manytomy
的特殊情况下:
在关系的拥有方指定。@JoinTable
- 拥有方是任意的,您可以选择两个实体中的任何一个作为所有者李>
同样值得一提的是,在JPA中,拥有方并不意味着包含方或拥有其他实体的一方。关于这方面的更多信息:您可以通过考虑在何处更新关联来选择拥有方。您只能在一个位置(拥有方)更新de ManyToMany关联。因此,选择取决于您希望如何管理/更新关联字段。只要存在M:N映射,即存在双向映射,我们就在代码中使用
@manytomy
和@JoinTable
。
要回答“哪一方应该拥有关系”这个问题,可以回到您创建的模型以及数据应该如何存储在数据库中。
通常,更改只从关系的所有者端传播到数据库。让我按照你的例子解释一下,
有两个表/模型/POJO,
Article
和Tag
。
无论何时发布
帖子
,都会与标签
建立关系。
或者,无论何时出版
书籍
,都会与作者建立关系。
因此,在您的情况下,
@JoinColumn
应该放在Post
中。谢谢您的示例。但是为什么mappedBy
属性在Tag
类中,而不在Article
类中?这不是问题的答案。我猜“to”是指“2”?您可能会考虑编辑您的帖子,使其更易于阅读。为了您的方便,下载页面。