如何解决JPA级联合并时
StackOverflow是由循环关系引起的。为了避免出现异常,我在多对多表中将键标记为@ManyToOne(fetch =FetchType.LAZY)
。
解决方法
这是我的JPA结构:
电影(看级联类型):
@Entity
@Table(name = "movie")
public class Movie {
@Id
@Column(name = "movie_id")
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
//@OneToMany(cascade = CascadeType.ALL,mappedBy = "primaryKey.movie") //stack overflow
@OneToMany(mappedBy = "primaryKey.movie") //works fine
private List<Rating> ratings;
....
}
评分:
@Entity
@Table(name = "rating")
@AssociationOverrides({@AssociationOverride(name = "primaryKey.movie",joinColumns = @JoinColumn(name = "movie_id")),@AssociationOverride(name = "primaryKey.user",joinColumns = @JoinColumn(name = "imdb_user_id"))})
public class Rating {
@EmbeddedId
private RatingId primaryKey = new RatingId();
@Column(name = "rating_value")
private Integer ratingValue;
.....
}
RatingId:
@Embeddable
public class RatingId implements Serializable{
@ManyToOne
private Movie movie;
@ManyToOne
private User user;
}
当我致电时entityManager.merge(Moviemovie)
,CascadeType.ALL
我得到了。如果删除级联,则合并调用不会引发错误。哪里可能有问题?
我认为这个问题与复合主键有关。在merge
具有相同一对多关系但没有复合ID的另一个实体上执行时没有错误。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。