在某些情况下,我有一个用户,并且该用户有一个EmailVerificationToken
我想在删除用户后删除EmailVerificationToken。
但是,由于EmailVerificationToken是一个仅需要很短时间(即仅使用一次且之后不相关)的对象,所以我不需要User实体包含令牌。相反,我希望EmailVerificationToken引用它所属的用户,而不是相反。
如何设置它,以便在删除用户时,即使在User实体中未引用它,它也会删除EmailToken?
这是我当前拥有的代码:
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;
}
答案 0 :(得分: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是实体管理器的实例。
希望这对您有所帮助。如有任何其他疑问,您可以随时询问。