【发布时间】:2018-02-12 21:12:54
【问题描述】:
我正在尝试在 Jpa Spring JPA (Hibernate) 中执行我认为的“一对多”关系,其中我有三个表(Post、Tag、Post_tag)。
一篇文章可能有多个标签,并且多个文章可能共享同一个标签以及其他标签。在标签重叠的地方,标签表中应该只有一个该标签的实例。
结构有点像以下:
帖子:
- 身份证
- 姓名
post_tag:
- post_id
- tag_id
标签:
- 身份证
- 标签
我的理解是,从 Post 的角度来看,这是一个“多对一”的关系,而从标签的角度来看,这是一个“一对多”的关系。目前我已经设法使用多对一关系来完成这项工作,但是这会产生许多具有不同 ID 的相同标签,并使数据库变得混乱,从而减慢速度并使我在 redis 中缓存结果以尝试加快查询速度这是一个临时修复!
我目前拥有的是:
@Table(name="Post")
public class Post implements Serializable {
...
@ManyToOne(targetEntity = Tags.class, cascade = {CascadeType.ALL, CascadeType.MERGE})
@JoinTable(name = "post_tags",
joinColumns = {@JoinColumn(name = "post_id")},
inverseJoinColumns = {@JoinColumn(name = "tag_id", unique=true)})
@OneToMany(fetch=FetchType.LAZY, cascade = CascadeType.ALL, mappedBy="post_tags")
public Set<Tags> tags;
还有标签表:
@Column(name = "tag", unique = true)
private String tag;
谢谢!
【问题讨论】:
-
这是多对多映射
-
Set字段怎么可能是
@ManyToOne???不能。
标签: java mysql spring hibernate jpa