在Hibernate中更新一对多/多对一关联对象

时间:2016-05-30 10:03:57

标签: java hibernate jpa

这感觉就像一个非常愚蠢的问题,但我似乎无法在任何地方找到一个例子。也许我谷歌使用错误的关键字。

无论哪种方式,我要做的是更新一对多映射。

类别类:

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。

0 个答案:

没有答案