我遇到@OneToMany
- 关系问题。我正在使用EclipseLink 2.5,我正在尝试维护双方,并希望直接在@Entity
- 类中实现这一点,根据此link和this。
所以,我有Product
和Manufacturer
,其中Manufacturer
可以有Products
的列表,而Product
只有一个Manufacturer
。我想实现,您可以更改Manufacturer
的{{1}}。因此,Product
- 类的setManufacturer()
- 方法将被调用:
Product
因此,如果public void setManufacturer(Manufacturer manufacturer) {
if (this.manufacturer != null) {
this.manufacturer.removeProduct(this);
}
this.manufacturer = manufacturer;
manufacturer.addProduct(this);
}
的{{1}}为Manufacturer
,我们只需将Product
添加到null
- Product
列表中。到目前为止,所有东西都运转良好。
但如果products
已经有Manufacturer
,然后有人更改了Product
,我想从旧版Manufacturer
的列表中删除Manufactuer
。因此,设置者中的Product
- 语句应该保持关系。
问题在于,当我保存产品并返回到我列出Manufacturer
所有if
Products
Manufacturer
我更改Product
的页面时出现在Manufacturer
中。它不会从旧版本中删除。
我如何在Manufacturers
- 班级内解决这个问题?我想我必须在旧@Entity
上调用merge()
- 方法,但我无法访问其中的Manufacturer
。要在EntityManager
执行此操作似乎不是非常好的代码。
因此。嗯。这让我发疯了。我希望你能明白我的意思。感谢任何tipps,抱歉中英文!
以下是两个类,我删除了不相关的部分:
Controller
答案 0 :(得分:1)
不要在实体代码中执行此操作,请在业务逻辑中执行此操作。
Manufacturer manufacturer = ...;
Product product = em.find(Product.class, productId);
if (product.getManufacturer() != null) {
product.getManufacturer().removeProduct(product);
}
product.setManufacturer(manufacturer);
manufacturer.addProduct(product);
em.merge(product);
em.merge(manufacturer);
实体代码应仅用于管理成员变量和关系。