【问题标题】:Removing referenced entity. Solution, tactics etc删除引用的实体。解决方案、策略等
【发布时间】: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


    【解决方案1】:

    在删除用户时,可以使用 ON DELETE SET NULL 等语法将链接到用户表的 cmets 字段设置为 null。您还需要为该字段允许 null

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-30
      • 1970-01-01
      • 1970-01-01
      • 2016-08-03
      • 2012-05-04
      • 2013-04-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多