【发布时间】:2017-10-25 12:22:06
【问题描述】:
也许这是一个过于简单的问题,但是当我尝试删除用户实体时遇到异常。
用户实体:
@Entity
@Table(name = "users")
public class User
{
@Transient
private static final int SALT_LENGTH = 32;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@NotNull
private String firstName;
@NotNull
private String lastName;
@Column(unique = true, length = 254)
@NotNull
private String email;
// BCrypt outputs 60 character results.
@Column(length = 60)
private String hashedPassword;
@NotNull
private String salt;
private boolean enabled;
@CreationTimestamp
@Temporal(TemporalType.TIMESTAMP)
@Column(updatable = false)
private Date createdDate;
我有一个实体类,它使用外键引用用户。我想要发生的是,当用户被删除时,任何引用用户的 PasswordResetToken 对象也会被删除。我该怎么做?
@Entity
@Table(name = "password_reset_tokens")
public class PasswordResetToken
{
private static final int EXPIRATION_TIME = 1; // In minutes
private static final int RESET_CODE_LENGTH = 10;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
private String token;
@OneToOne(targetEntity = User.class, fetch = FetchType.EAGER)
@JoinColumn(nullable = false, name = "userId")
private User user;
private Date expirationDate;
我得到的异常归结为Cannot delete or update a parent row: a foreign key constraint fails (`heroku_bc5bfe73a752182`.`password_reset_tokens`, CONSTRAINT `FKk3ndxg5xp6v7wd4gjyusp15gq` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`))
我想避免在父实体中添加对PasswordResetToken 的引用,因为User 不需要知道关于PasswordResetToken 的任何信息。
【问题讨论】:
-
假设您看一下这个post,它解释了有关您的问题和解决方案的更多信息。
-
假设你必须添加
@OneToOne(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true) -
到用户实体?还是 PasswordResetToken 实体?我真的不想在 User 实体中添加对子项的任何引用,因为用户实体不需要知道重置令牌的存在。
-
到
PasswordResetToken -
我收到
Unknown MappedBy错误。为什么?
标签: java mysql jpa spring-boot spring-data-jpa