这感觉就像一个非常愚蠢的问题,但我似乎无法在任何地方找到一个例子。也许我谷歌使用错误的关键字。
无论哪种方式,我要做的是更新一对多映射。
类别类:
public class Category {
...
@OneToMany(orphanRemoval=true, targetEntity = Color.class, mappedBy="category", fetch = FetchType.EAGER, cascade=CascadeType.ALL)
private Set<Color> colors;
}
Tye Color类:
public class Color {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "COLOR_ID")
private Long color_id;
...
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name="CATEGORY_ID", nullable=false)
private Category category;
...
}
我想更新一个Color,使它现在属于Category2而不是Category1。问题是,如果我从Category1中删除颜色并更新它,然后将颜色添加到Category2并更新Category2,则颜色将具有新ID。我希望保留ID。
我尝试将Color添加到Category2,只需将Color的类别更改为Category2,然后保持Category2。然后数据库中的数据状态是正确的,但Hibernate中缓存的Category1对象没有更新。
我使用JPA EntityManager来保存对象。
编辑:
根据要求,以下是我将颜色移动到另一个类别时运行的代码的细分。
color = category1.getColors().remove(color);
color.setCategory(category2);
category2.getColors().add(color);
entityManager.getTransaction().begin();
entityManager.merge(category1);
entityManager.getTransaction().commit();
entityManager.getTransaction().begin();
entityManager.merge(category2);
entityManager.getTransaction().commit();
String queryString = getQueryString();
List<Category> categories = null;
Query query = entityManager.createQuery(queryString);
categories = query.getResultList();
“颜色”现在属于新类别,但带有新ID。