发布具有关系的Spring Data REST的实体

2022-09-04 01:04:38

我正在使用Spring Data Rest。我在尝试发布具有关联的对象时遇到问题(例如,地址是我实体中的一个字段,该字段被映射到一个)。

问题是,我们应该使用什么格式将我们的新实体与其关系联系起来。我看到了几个答案,并尝试了我找到的所有选项。不幸的是,所有这些都不适合我。发生以下错误:

Caused by: org.h2.jdbc.JdbcSQLException: NULL not allowed for column "ADDRESS_ID"; SQL statement:

我尝试过的 JSON:

{
"name": "test",
"email": "test@email",
"address": "http://localhost:8080/MyApp/address/1"
}

还尝试了以下操作:

"address": {"id":"http://localhost:8080/MyApp/address/1"}

还有这个:

"address":{"id":1}

甚至这个:

"address": {
"href": "http://localhost:8080/MyApp/address/1"
}

有没有办法做到这一点,或者只为POST编写自己的控制器实现?谢谢!


答案 1

如果您有这样的模型:

@Entity
public class User {
    //..
    private String name;

    @OneToMany(mappedBy = "user")
    private Set<Address> addresses = new HashSet<>();
    //..
}

@Entity
public class Address {
    //..
    @ManyToOne
    private User user;
    //..
}

然后你可以用它发布一个新的,就像这样:Useraddresses

POST http://localhost:8080/api/users
{
    "name" : "user1",
    "addresses" : [
        "http://localhost:8080/api/addresses/1",
        "http://localhost:8080/api/addresses/2"
        ]
}

在为新用户开机自检之前,地址 ID#1 和 ID#2 必须已持久保存。


答案 2

推荐