我的应用程序存在以下问题。
定义:我有 3 张桌子。用户、密码和确认令牌。用户表是父表。密码和确认令牌表是与用户表具有一对一关系的子表。用户和确认表 ID 作为外键存储在用户表中。
问题:
当用户激活他的帐户时,应从确认令牌表中删除确认令牌行。因此,用户表中的列也应该被删除。
我实现了什么:使用以下方案,发生的情况是,当我删除确认令牌时,整个用户行数据也会被删除,但密码行数据不会被删除。我想要的是,当确认令牌被删除时,应该只删除用户表中的相应行和外键列。
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int userId;
private String username;
private String email;
private UserStatus status;
private LocalDateTime registerDate;
private LocalDateTime lastLoginDate;
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "PASSWORD_ID", referencedColumnName = "passwordId")
private UserPasswords userPassword;
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "ACCOUNT_CONFIRMATION_TOKEN_ID")
private ConfirmationToken confirmationToken;}
@Entity
public class ConfirmationToken {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int tokenId;
private String confirmationToken;
private LocalDateTime creationDate;
@OneToOne(fetch = FetchType.LAZY, mappedBy = "confirmationToken",cascade=CascadeType.REMOVE, optional=true)
private User user;
}
@Entity
@Table(name = "USER_PASSWORDS")
public class UserPasswords {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int passwordId;
private String password;
private String beforePassword;
private int wrongPasswordTrial;
private LocalDateTime wrongPasswordDate;
private LocalDateTime lastPasswordUpdate;
@OneToOne(fetch = FetchType.LAZY, mappedBy = "userPassword")
private User user;