해결 방법을 찾지 못해 혼란스러운 문제가 있습니다. 어떻게하면 문제를 해결할 수 있는지 제안 할 수 있다면 감사 할 것입니다.@ManyToMany 연결 삭제시 최대 절전 모드 예외
그래서 다음 엔티티 관계 모델 here이 있습니다.
User.class의 매핑은 다음과 같습니다
는@Entity
@Table(name = "CRM_USER")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "USER_ID")
private Long id;
@Column(name = "FIRST_NAME")
private String firstName;
@Column(name = "LAST_NAME")
private String lastName;
@Column(name = "BIRTHDATE")
private Date birthDate;
@Column(name = "EMAIL")
private String email;
@OneToOne(cascade = CascadeType.ALL)
@PrimaryKeyJoinColumn
private UserAdditionalInfo additionalInfo;
@ManyToOne
@JoinColumn(name = "TEAM_FK")
private Team team;
@ManyToOne
@JoinColumn(name = "JOB_FK")
private Job job;
@ManyToOne
@JoinColumn(name = "ORGANIZATION_FK", nullable = false)
private Organization organization;
@OneToOne(cascade = CascadeType.ALL)
@PrimaryKeyJoinColumn
private Security security;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "INFO_FILE_FK")
private InfoFile profilePicture;
@ManyToOne
@JoinColumn(name = "COUNTRY_FK")
private Country country;
// Getters and Setters
}
Comment.class의 매핑은 다음과 같습니다
@Entity
@Table(name = "CRM_COMMENT")
public class Comment implements Serializable {
private static final long serialVersionUID = -104145851368148154L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "COMMENT_ID")
private Long id;
@ManyToOne
@JoinColumn(name = "ARTICLE_ID")
private Article article;
@ManyToOne
@JoinColumn(name = "USER_FK", nullable = false)
private User createdUser;
@Column(nullable = false)
private String comment;
@Column(name = "CREATION_DATE", nullable = false)
private Date creationDate;
@Column(name = "MODIFICATION_DATE")
private Date modificationDate;
@OneToMany(cascade = {CascadeType.ALL}, orphanRemoval = true)
@JoinTable(name = "CRM_COMMENT_LIKE",
joinColumns = {@JoinColumn(name = "COMMENT_ID")},
inverseJoinColumns = {@JoinColumn(name = "USER_ID")})
private Set<User> fans = new LinkedHashSet<>();
// Getters and Setters
}
는 Article.class의 매핑입니다 :
@Entity
@Table(name = "CRM_ARTICLE")
public class Article implements Serializable {
// other properties
@OneToMany(mappedBy = "article", cascade = {CascadeType.ALL}, orphanRemoval = true)
@OrderBy("id DESC")
private Set<Comment> comments = new LinkedHashSet<>();
// Getters and Setters
}
문제는 설명과 사용자 간의 내 ManyToMany 관계 - CRM_COMMENT_LIKE와 관련이 있습니다.
사실, '팬'을 댓글에 추가하면 문제가 없습니다. 내가/'팬'그것 '처럼'하나 이상의 을 가지고 몇 가지 코멘트를 삭제하려고하면
@Override public boolean giveAnLikeToComment(Long commentId, User fan) { Comment comment = commentDao.get(commentId); if (Objects.isNull(comment)|| BooleanUtils.isTrue(comment.getFans().contains(fan))) { return false; } comment.getFans().add(fan); commentDao.update(comment); return true; }
문제
가 발생합니다.@Override
public boolean deleteCommentById(final Long commentId) {
Comment comment = commentDao.get(commentId);
if (Objects.nonNull(comment)) {
Article article = comment.getArticle();
article.getComments().remove(comment);
comment.setFans(null); // This line fix the problem
articleDao.update(article);
return true;
}
return false;
}
이 경우, 기사 (설명의 부모)와 주석 자체 사이의 관계를 관리합니다. 둘 사이의 연결이 양방향이기 때문에 이것은 쉽습니다. 그러나 팬들은 어떻습니까? 사용자가 CRM_COMMENT_LIKE 또는 주석에 대해 알지 못하기 때문에 설명과 CRM_COMMENT_LIKE 관계 간의 연결을 제거 할 수 없습니다. CRM_COMMENT_LIKE에서 댓글을 삭제하고 삭제 된 모든 관계를 제거하고 싶습니다.
삭제 된 개체가 캐스케이드 (협회에서 삭제 된 개체를 제거)에 의해 다시 저장됩니다 : [crm.alltogether.core.admin.model Hibernate는 말한다 예외가 발생하기 때문에하지만, 예방입니다. 사용자 # 1]; 삭제 된 오브젝트 (오브젝트 연관 삭제 삭제) 다단 재 저장 될 것이다 : 중첩 예외 org.hibernate.ObjectDeletedException가 [crm.alltogether.core.admin.model.User # 1]
당신이 제안이있는 경우, 내가 :) 읽어
안부 기쁠 이렇게하면, 당신은 Article
및 Comment
사이 orphanRemoval=true
캐스 케이 딩이 필요
안녕하십니까. 의견을 보내 주셔서 감사합니다. 그러나 오류가 여전히 존재합니다. – Streetsouls
예외적으로 분명히 말하지만, '사용자'에 대한 연결을 제거해야합니다. 'comment.setFans (null)'을 설정하거나 모든'fans'를 먼저 삭제 한 다음 주석을 삭제할 수 있습니다. –
안녕하세요. 대단히 감사합니다. 'deleteCommentById()'내부에서이 변경 후에, 모든 것이 완벽하게 작동합니다. Hibernate는 다음을 생성한다 : 'Hibernate : CRM_COMMENT_LIKE에서 삭제 어디서 COMMENT_ID =? 최대 절전 모드 : CRM_COMMENT에서 삭제 COMMENT_ID =? ' 안부 인사 : – Streetsouls