如何使用ManyToOne关系将JSON转换为POJO?

时间:2017-06-30 00:13:14

标签: java hibernate spring-data-jpa

我有一个与另一个实体建立双向@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函数调用,那么有没有办法启动事务所以所有这些插入操作都是原子的?

1 个答案:

答案 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);