问候所有,我的课程名为产品,课程供应商。供应商是产品的母公司。
我在产品中使用注释 ManyToOne 定义了属性供应商。
创建产品A和供应商S1后,我首先将S1与A关联。然后,当我尝试将A的供应商从S1更改为S2时,我创建了第二个供应商S2。 JPA告诉我"供应商实例的标识符从X改为Y"。
我不需要在此处创建/更新供应商。我只想将供应商从一个供应商更改为另一个供应商。
我可以知道会出现什么问题吗?
@Entity
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id", updatable = false, nullable = false)
private Long id;
@ManyToOne(cascade=CascadeType.ALL)
private Company supplier;
...
}
服务代码:
Product productDB=this.findProductByProductIDCurrentUser(productForm.getId());
dozer.map(productForm, productDB);
if(productForm.getSupplier()!=null){
Company company =
companyRepository.findOne(productForm.getSupplier().getId() );
if(company!=null){
Company supplier = new Company();
supplier.setId(productForm.getSupplier().getId());
productDB.setSupplier(supplier);
}
}
em.merge(productDB);
最诚挚的问候, 约翰
答案 0 :(得分:0)
您必须首先在持久性上下文中管理供应商2。
然后您可以将其设置为Product实体中的引用。
所以..
ProductA productA = session.findProductA(..);
Supplier s2 = new Supplier();
// construct s2
em.merge(s2);
productA.setSupplier(s2);
em.merge(productA); // optional
<强>更新强>
您还可以尝试分离产品,设置产品并将其重新合并:
em.detach(product);
product.setSupplier(s2);
em.merge(product);