2

我正在将 JPA2.O 与 Hibernate 一起使用。我在用户和地址之间有一对多的关系,并且我对这种关系有以下配置:

cascade = CascadeType.ALL, fetch = FetchType.LAZY,

例如,我在数据库表中有以下条目:

用户表

Column: UserID | UserName
row1:    User1 | UserName

地址表

Column: AddressId| UserID | Address    

row1:   Address1 | User1  | Actual Address

row2:   Address2 | User1  | Actual Address

我可以通过 userId 使用 find 来获取用户实体:

User user = entityManager.find(User.class, userId);

并且还可以使用 user.getAddresses() 获取答案。getAddressess() 的代码如下:

public class User{
    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "user")
    public Set<Address> getAddresses() {
       return this.addresses;
    }
}

现在我正在尝试做的是获取一组地址并删除一个条目。假设我在第一次获得地址 1 和 2 时获取了地址集。我从地址集中删除了地址 2 实体。现在用户实体指向只有 1 个用于地址 1 的条目的集合。

现在,如果我使用以下方法合并用户实体,我认为应该从地址表中删除地址 2 的行。但它没有发生。我是否错过了任何事情,或者这不是一种方法。请建议。

entityManager.merge(user); 
4

1 回答 1

3

只是想在我开始工作时添加更多细节。

我用@OneToMany关系添加了orphanRemoval = true :

public class User{
    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true, mappedBy = "user")
    public Set<Address> getAddresses() {
       return this.addresses;
    }
}

更改我的代码后,我重新测试它并得到以下错误:

Caused by: org.hibernate.HibernateException: A collection with cascade="all-delete-orphan" was no longer referenced by the owning entity instance:

此链接帮助我解决了上述问题:

现在我可以从数据库中删除子实体,如果它们与父实体中定义的集合断开连接(删除)。

于 2013-03-21T07:30:23.627 回答