如何在不删除拥有实体的情况下删除Hibernate中的可选实体



Hibernate似乎强制实体之间的关系。但是,我有一个User实体和一个Portfolio实体。每个User可以有0个或1个投资组合(但每个Portfolio必须有一个User(。因此,User应当能够在不删除User实体的情况下删除Portfolio。到目前为止,我无法实现这一结果。相反,如果User删除了他/她的Portfolio,则User也被删除。

如何修改注释以获得所需结果?

-用户

/*
* Each User can have a Portfolio with many Accounts. 
*/
@Entity
@Check(constraints = "LENGTH(TRIM(username)) > 0 &&"
+ " LENGTH(TRIM(username)) > 0 &&"
+ " LENGTH(TRIM(email)) > 0 &&"
+ " LENGTH(TRIM(password)) > 10")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long id;
@Nationalized
@NotNull
private String username;
@Nationalized
@NotNull
private String password;
private String salt;
@Nationalized
@NotNull
private String email;
@OneToOne(fetch = FetchType.LAZY, mappedBy = "user" ,cascade = CascadeType.ALL)
private Portfolio portfolio;
// Not showing constructors, getters, or setters

}

-投资组合

/*
* An Portfolio is a collection of accounts.
*/
@Entity
public class Portfolio {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long id;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "user_id")
private User user;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "portfolio", cascade = CascadeType.ALL)
private List<Account> accounts = new ArrayList<>();
// Not showing constructors, getters, or setters
}

问题在于Portfolio实体中配置的级联。

通过设置cascade=CascadeType.ALL,您指示hibernate在删除Portfolio时,应该删除级联上的相关用户。

在这种情况下,您可以删除该关系中的级联,并将级联保留在User.portfolio关系中,因为您希望在删除User时删除portfolio。

最新更新