0

我有一个案例,我有一个用户,而用户有一个EmailVerificationToken.

我想EmailVerificationToken在用户被删除时删除。

但是,由于EmailVerificationToken是一个仅在短时间内需要的对象(即仅使用一次并且之后无关紧要),因此我不希望User实体包含令牌。相反,我希望EmailVerificationToken引用它所属的用户,而不是相反。

如何设置它,以便当我删除用户时,EmailToken即使它没有在User实体中引用它,它也会删除它?

这是我目前的代码:

public class EmailVerificationToken implements IEntity, IDto {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "emailVerificationTokenId")
    private Long id;

    @OneToOne
    @JoinColumn(name = "userId", nullable = false)
    private User user;
}

public class User implements IEntity, IDto, UserDetails {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "userId")
    private Long id;
}
4

1 回答 1

0

我猜你有一个处理用户删除的事务服务。

您需要在 EmailVerificationToken 类中添加一个命名查询。就像是

@NamedQuery(name = EmailVerificationToken.FIND_BY_USER, query = "Select e from EmailVerificationToken e where e.user =:user"), 同时在你的类中为查询的名称添加一个常量,例如:

public static final String FIND_BY_USER = "EmailVerificationToken.FindByUser"; 

然后,您需要定义一个服务,该服务使用给定的 User 实例查找令牌类的托管实例。

然后在要删除用户的事务方法中,首先删除令牌;

public void deleteUser(User user){
EmailVerificationToken token = someService.findByUser(user); //you get a 
//managed instance using the previously defined query
em.remove(token);
em.remove(user);

}

em 是实体管理器的一个实例。

希望这对您有所帮助。对于任何进一步的问题,您可以自由提问。

于 2019-07-31T09:11:11.493 回答