@Entity
public class Post {
private Set<Comment> comments = new LinkedHashSet<Comment>();
@OneToMany(mappedBy = "businessunit", fetch = FetchType.LAZY, cascade = { CascadeType.ALL }, orphanRemoval = true)
public Set<Comment> getComments() {
return comments;
}
}
@Entity
public class Comment {
private Post Post;
private BUnit bUnit;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "POST_ID", referencedColumnName = "ID")
public Post getPost() {
return post;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "BU_ID", referencedColumnName = "ID")
public BUnit getBUnit() {
return bUnit;
}
}
我有一个包含子集的父类。添加操作正常,因为我将注释添加到Set中,当我保存父项时,也保存了子项。
对于更新操作,我将收到现有评论和新评论。我更新现有注释的modified_by字段,并为新注释设置了所需的字段。接下来我清除该集并添加所有注释(新的和现有的注释),这样我就不会得到all-delete-orphan错误。
post.getComments().clear();
post.getComments().addAll(newComments);
dao.update(post);
更新抛出异常org.hibernate.LazyInitializationException:懒得初始化角色集合:
如何修复此问题的任何想法,其中子元素将包含新元素和现有元素。
感谢。
答案 0 :(得分:0)
对于初学者,您的mappedBy = "businessunit"
需要引用另一方的属性名称,在本例中为post
。
如果您仍然看到异常,可以查看here。 (这种例外有多种原因。)
最后,还有一个小问题,您不需要明确标记fetch = FetchType.LAZY
,因为这是默认值。您可以删除它以提高可读性。
答案 1 :(得分:0)
我找到了解决方案。更新是在事务下执行的,并且工作正常。在事务之外,我正在访问db模型子对象以转换为ui模型。这也是异常的原因,我也不需要访问子元素,所以最终我删除了它。