0

私のアプリケーションには次の問題があります。

定義: 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;
4

1 に答える 1