Java 发布具有关系的Spring数据REST的实体

Java 发布具有关系的Spring数据REST的实体,java,spring,hibernate,spring-data-rest,Java,Spring,Hibernate,Spring Data Rest,我使用的是Spring数据Rest。我在尝试发布具有关联的对象时遇到问题(例如,address是实体中映射为一个多个的字段) 问题是,我们应该用什么形式将新实体与其关系联系起来。我看到了几个答案,并尝试了我找到的所有选项。不幸的是,这些都不适合我。 发生以下错误: Caused by: org.h2.jdbc.JdbcSQLException: NULL not allowed for column "ADDRESS_ID"; SQL statement: 我尝试过的JSON: { "name

我使用的是Spring数据Rest。我在尝试发布具有关联的对象时遇到问题(例如,address是实体中映射为一个多个的字段)

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

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编写自己的控制器实现?谢谢

如果您有这样的模型:

@实体
公共类用户{
//..
私有字符串名称;
@OneToMany(mappedBy=“用户”)
私有集地址=新HashSet();
//..
}
@实体
公共课堂演讲{
//..
@许多酮
私人用户;
//..
}
然后您可以发布一个新的
用户
,其
地址如下:

POSThttp://localhost:8080/api/users
{
“名称”:“user1”,
“地址”:[
"http://localhost:8080/api/addresses/1",
"http://localhost:8080/api/addresses/2"
]
}

在发布新用户之前,必须保留ID#1和ID#2的地址。

发布您的实体。DB中有哪些语句?显然,您正在生成一个insertYes,它是POST和insert语句。address对象存在,我需要创建另一个实体的新对象,其中address只是一个关联。在这里,我可以看到我们只需要使用ID。但API应该解决这个问题。然而,这只是哈尔本身。Spring可以做得不同。如果我发布到以:开头的URL,我不需要在请求中指定它,它就可以工作。然而,这没有帮助。因为我想使用上面提供的端点。谢谢你的回答!若用户的地址不是集合怎么办?e、 g.私人地址@dvelopp使用相同的技术:
“地址”:http://localhost:8080/api/addresses/1“
(如果我的答案对你有帮助,请别忘了接受/投票)。仍然不起作用。也许是我的整体结构。说找不到身份证。“地址”:“@dvelopp查看我的工作…谢谢。这里有很多有用的例子。看来我需要调查PagedResourcesAssembler并得出一些结论。在此之前,我将使用我前面提到的“如果我发布到以:localhost:8080/MyApp/address/1/persons开头的URL,我不需要在请求中指定它,它就可以工作。但是,这没有帮助。因为我想使用上面提供的端点。-Dvelop昨天”