2017-11-16 3 views
0

나는 다른 레코드와의 관계에있는 데이터베이스에서 레코드를 제거하는 문제를 해결하는 방법을 궁금합니다. 다음은 예입니다. 이들은 사용자와 설명을 나타내는 두 클래스입니다.참조 된 엔터티를 제거합니다. 솔루션, 전술 등

@Entity 
public class Comment { 
    @Id @GeneratedValue 
    @Getter @Setter 
    private long id; 

    @Getter @Setter 
    @OneToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "author_id") 
    private User commentAuthor; 

    @Getter @Setter 
    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "article_id") 
    private Article associatedArticle; 

    @Getter @Setter 
    @Column(columnDefinition="DATETIME") 
    @Temporal(TemporalType.TIMESTAMP) 
    private Date date; 


    @Getter @Setter 
    @Type(type="text") 
    private String commentText; 

    public Comment(User author, String text){ 
     this.commentAuthor = author; 
     this.commentText = text; 
     this.date = new Date(); 
    } 
} 

및 사용자 클래스 :

@Entity 
public class User { 

    @Getter @Setter 
    private String username; 

    @Getter @Setter 
    private String password; 

    @Id 
    @Getter @Setter 
    private String email; 

    @Getter @Setter 
    private String role; 

    @Getter @Setter 
    @Column(columnDefinition="DATETIME") 
    @Temporal(TemporalType.TIMESTAMP) 
    private Date registerDate; 

    public User(String username, String password, String email){ 
     this.username = username; 
     this.password = BCrypt.hashpw(password, BCrypt.gensalt()); 
     this.email = email; 
     this.registerDate = new Date(); 
     this.role = "USER"; 
} 

public User(){}; 

당신은 내가 사용자가 주석을 추가 정보를 저장할 볼 수 있듯이. 그러나이 사용자를 삭제하려고한다고 가정 해 봅시다. 내가 외래 키 등에 대한 SQL 에러를 얻을 것이기 때문에 주석을 추가한다면 그렇게 할 수 없을 것이다. 나는 이것이 단지 나쁜 DB 디자인 일 뿐이라는 것을 확신하지만이 문제를 어떻게 해결할 지 확신하지 못한다. 분명히 사용자를 삭제할 때 자신의 코멘트를 유지하고 사용자 이름 대신 "사용자 삭제"와 같은 정보를 보여줄 것입니다. 적절한 방법은 무엇입니까?

답변

0

ON DELETE SET NULL과 같은 구문을 사용하여 사용자를 삭제하면 사용자 테이블에 연결된 주석 필드를 null로 설정할 수 있습니다. 해당 필드에 null을 허용해야합니다.