休眠:删除实体
问题描述:
在我的春节,启动应用程序的网络实体,有两种类型的实体:User
和Group
:休眠:删除实体
- 用户可以根据自己的0到N组
- 组可以有1〜 M个成员
在User
类存在的Group
他/她拥有或组织的成员,并在Group
类的列表,还有的User
(即成员)名单。
这些类使用hibernate注释互相引用。
class User {
@ManyToMany(cascade = CascadeType.REFRESH)
private List<Group> groups;
}
class Group {
@ManyToOne(cascade = CascadeType.REFRESH)
@NotNull
@JoinColumn(name="OWNER_ID", referencedColumnName="id")
private User owner;
@ManyToMany
@JoinTable(joinColumns = @JoinColumn(referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(referencedColumnName = "id"))
private List<User> members;
}
在User
服务层有一个Delete
方法这是应该删除从存储库中的用户。此删除操作应执行一系列操作:删除该用户拥有的所有组,并将删除的组从其成员的组列表中删除。所有这些应该保存到存储库。
如果我添加其他类型的实体到这个网络,这个过程变得更加复杂。
我的问题是:不休眠自动处理?我是否应该抓住每个成员并逐个删除组并将其保存到存储库?
答
CascadeType.REFRESH表示托管对象可以使用刷新方法从数据库重新加载。
这不会帮助您解决您的需求。你需要使用“orphanRemoval = true”CascadeType。 “orphanRemoval = true”从数据库中删除拥有的对象时,它将从其拥有的关系中删除。
例子:
EmployeeEntity.java
@Entity @Table(name = "Employee")
public class EmployeeEntity implements Serializable
{
private static final long serialVersionUID = -1798070786993154676L;
@Id @Column(name = "ID", unique = true, nullable = false)
private Integer employeeId;
@Column(name = "FIRST_NAME", unique = false, nullable = false, length = 100)
private String firstName;
@Column(name = "LAST_NAME", unique = false, nullable = false, length = 100)
private String lastName;
@OneToMany(orphanRemoval = true, mappedBy = "employee")
private Set<AccountEntity> accounts;
}
AccountEntity.java
@Entity (name = "Account") @Table(name = "Account")
public class AccountEntity implements Serializable
{
private static final long serialVersionUID = 1L;
@Id @Column(name = "ID", unique = true, nullable = false)
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Integer accountId;
@Column(name = "ACC_NO", unique = false, nullable = false, length = 100)
private String accountNumber;
@ManyToOne
private EmployeeEntity employee;
}
,或者您可以使用CascadeType.ALL了。
如要进一步了解,请通过下面的链接:
在您的例子,如果一个帐户被删除,难道我们要经过所有谁指向该帐户的员工和删除该帐户'账号'一个接一个地设置?我的例子与你的稍有不同。 –