【发布时间】:2023-03-27 08:50:01
【问题描述】:
我想知道如何解决从数据库中删除与其他记录有关的记录的问题。这是一个例子。这是两个代表用户和评论的类。
@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(){};
如您所见,我存储了用户添加评论的信息。但是让我们假设我想删除这个用户。如果他添加了 cmets,我将无法做到这一点,因为我会收到关于外键等的 SQL 错误。我很确定这只是糟糕的数据库设计,但我不确定如何解决这个问题。显然,在删除用户时,我想保留他的 cmets,而不是他的用户名,只显示一些信息,如“用户已删除”。正确的做法是什么?
【问题讨论】:
标签: java sql database spring spring-data