2017-11-16 8 views
0

私は、データベースからレコードを削除するという問題を、他のレコードとの関係で解決する方法を知りたいと思います。ここに例があります。それらはユーザーとコメントを表す2つのクラスです。参照先のエンティティを削除しています。ソリューション、戦術など

@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のような構文を使用して削除されたときに、userテーブルにリンクされているコメントのフィールドをnullに設定できます。また、そのフィールドにnullを許可する必要があります

関連する問題