我有一个与另一个实体建立双向@OneToMany
关系的实体。这是它的外观:
@Entity
@Table
public class Foo {
@Id
@GeneratedValue
Integer foo_id;
@OneToMany
@JoinColumn(name = "FOO_ID")
Set<Bar> bars;
}
@Entity
@Table
public class Bar {
@Id
@GeneratedValue
Integer bar_id;
@ManyToOne
@JoinColumn(name = "FOO_ID")
Foo foo;
}
如何使用Foo
保存bars
设置CrudRepository
的对象?因此,例如,我将此JSON反序列化为Foo
对象:
{
"foo_id": 1,
"bars": [{"bar_id": 1},
{"bar_id": 2}]
}
我需要以某种方式设置Foo
变量吗?
如果我需要为每个save()
使用单独的Bar
函数调用,那么有没有办法启动事务所以所有这些插入操作都是原子的?
答案 0 :(得分:0)
首先,您应该像这样映射关系:
@OneToMany(mappedBy="foo", cascade=CascadeType.PERSIST)
Set<Bar> bars;
级联类型取决于您的需求。有关级联类型的更多信息,请阅读此article。
然后,您可以像这样保存Foo实体:
Foo foo = new Foo();
Set<Bar> bars = new HashSet<>();
Bar bar = new Bar();
bar.setFoo(foo);
bars.add(bar);
foo.setBars(bars);
fooRepositoy.save(foo);