我有一个Contribution
实体
@Entity
public class ContributionEntity {
private MovieEntity movie;
private UserEntity user;
}
UserEntity
和MovieEntity
都有列表
private Set<ContributionEntity> contributions;
我正在寻找一种正确映射列表的方法,以便在添加贡献时,UserEntity
和MovieEntity
在列表中有此贡献。我做了
// ContributionEntity
@ManyToOne
@JoinColumn(name = "movie_id")
private MovieEntity movie;
@ManyToOne
@JoinColumn(name = "user_id")
private UserEntity user;
// MovieEntity
@OneToMany(mappedBy = "movie", fetch = FetchType.LAZY)
private List<ContributionEntity> contributions = new ArrayList<>();
// UserEntity
@OneToMany(mappedBy = "user", fetch = FetchType.LAZY)
private List<ContributionEntity> contributions = new ArrayList<>();
但是,这样会出现问题,因为我无法在UserEntity
和MovieEntity
中添加对列表的贡献,因为我会将相同的对象两次添加到数据库中。
在这种情况下哪种映射是正确的?
答案 0 :(得分:0)
正如你所说,将Contribution
添加到两个列表中是行不通的,因为Hibernate并不知道它是同一个对象。因此,您可以(非常繁琐)创建Contribution
,设置相应的Movie
并将其添加到User
的贡献中。或者反过来,向新创建的User
添加Contribution
并将其添加到Movie
的贡献列表中。请注意,您必须确保Contribution
也被保留(例如@Cascade
或手动保存)。
更好的方法是将重点放在Contribution
上。如果您创建并保存Contribution
,它将自动出现在两个列表中(但不会出现在当前事务中,但无论如何都可能不需要)。