【发布时间】:2013-03-09 17:14:12
【问题描述】:
我在 Hibernate 中使用 JPA2.O。我在用户和地址之间有一对多的关系,并且我有以下这种关系的配置:
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 个用于 Address1 的条目的 Set。
现在,如果我使用以下方法合并用户实体,我认为应该从地址表中删除地址 2 的行。但它没有发生。我是否错过了任何事情,或者这不是一种方法。请建议。
entityManager.merge(user);
【问题讨论】:
-
1) 建议改成@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "user", orphanRemoval = true) 2) 请提供更多的第一种和第二种情况的代码
-
谢谢迈克尔。这对我有用。我也从stackoverflow.com/questions/4329577/…得到了一个很好的描述。