【发布时间】:2018-06-04 23:22:55
【问题描述】:
我有一个Contribution 实体
@Entity
public class ContributionEntity {
private MovieEntity movie;
private UserEntity user;
}
UserEntity 和 MovieEntity 都有列表
private Set<ContributionEntity> contributions;
我正在寻找一种正确映射列表的方法,以便在添加贡献时,UserEntity 和 MovieEntity 在列表中具有此贡献。我做了
//贡献实体
@ManyToOne
@JoinColumn(name = "movie_id")
private MovieEntity movie;
@ManyToOne
@JoinColumn(name = "user_id")
private UserEntity user;
//电影实体
@OneToMany(mappedBy = "movie", fetch = FetchType.LAZY)
private List<ContributionEntity> contributions = new ArrayList<>();
//用户实体
@OneToMany(mappedBy = "user", fetch = FetchType.LAZY)
private List<ContributionEntity> contributions = new ArrayList<>();
但是这种方式有一个问题,因为我无法在UserEntity和MovieEntity的列表中添加贡献,因为我会将同一个对象添加到数据库中两次。
在这种情况下什么映射是正确的?
【问题讨论】:
-
我不明白上下文。最后一段代码属于哪个类?
-
它没有直接关系,但是使用提供的数据创建贡献而不是将其两次添加到用户和电影中的列表中不是更好吗?我的意思是我认为贡献不应该没有用户或电影存在,但这可能会以你的方式发生。
-
@Matt:我编辑了问题。
-
您可以删除关系的
one-to-many侧并将电影和用户视为元实体。这样做只会存在many-to-one关系,您可以通过“findAllByMovie(Movie movie)”之类的方式获取电影的贡献列表(取决于您的持久层选择)
标签: java spring hibernate spring-mvc spring-boot