我正在尝试更新另一个表中外键数据列表。
场景:
我有A类:
public class A{
@javax.persistence.Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
@OneToMany(mappedBy = "A", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private List<B> b;
}
我还有一个B类:
public class B {
@javax.persistence.Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
@ManyToOne(fetch = FetchType.EAGER, optional = false)
@JoinColumn(name = "a_id", nullable = false)
private A a;
}
我的目标是:以完美的方式更新B的列表。
示例:
我有表B ID列表:
| 标识符|姓名|识别码(_I)|
| - -|- -|- -|
| 一个|n1号|一个|
| 2个|氮气|一个|
| 三个|三号|一个|
| 四个|四号|2个|
| 五个|五号|一个|
| 六个|六号|三个|
我有以下列表需要更新:
[n3,n9,n2,n7,n8]
对于a_id = 1,必须更新该列表,因此在这种情况下,我有两件事要做:
first : adding n7, n8, n9 (with a_id = 1)
second: remove n1, n5 (because they are not included in the list above)
我的预期输出:
| 标识符|姓名|识别码(_I)|
| - -|- -|- -|
| 2个|氮气|一个|
| 三个|三号|一个|
| 四个|四号|2个|
| 六个|六号|三个|
| 七个|七号|一个|
| 八个|八号|一个|
| 九个|九号|一个|
我们怎样才能以最好的方式达到这个结果呢?
1条答案
按热度按时间zynd9foi1#
使用下面的Map,只合并/保存
A
实体,Hibernate将负责删除/持久化/更新。如果您希望在
B
中保留a
关联,则必须通过分别为各个B
实体调用EntityManager.persist
/EntityManager.merge
/EntityManager.remove
来手动执行持久化/更新/删除操作。