休眠:删除实体

问题描述:

在我的春节,启动应用程序的网络实体,有两种类型的实体:UserGroup休眠:删除实体

  1. 用户可以根据自己的0到N组
  2. 组可以有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了。

如要进一步了解,请通过下面的链接:

CascadeTypes

+0

在您的例子,如果一个帐户被删除,难道我们要经过所有谁指向该帐户的员工和删除该帐户'账号'一个接一个地设置?我的例子与你的稍有不同。 –