私のアプリケーションには次の問題があります。
定義: 3 つのテーブルがあります。ユーザー、パスワード、および確認トークン。ユーザー テーブルは親テーブルです。パスワード テーブルと確認トークン テーブルは、ユーザー テーブルと 1 対 1 の関係を持つ子テーブルです。ユーザーおよび確認テーブル ID は、外部キーとしてユーザー テーブルに格納されます。
問題:
ユーザーがアカウントをアクティブ化すると、確認トークン行が確認トークン テーブルから削除されます。したがって、user テーブルの列も削除する必要があります。
私が達成したこと: 次のスキームでは、確認トークンを削除すると、ユーザー行データ全体も削除されますが、パスワード行データは削除されません。私が望むのは、確認トークンが削除されたときに、ユーザーテーブルから対応する行と外部キー列のみを削除することだけです。
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;