无法为实体存储ManyToOne关联



我无法在POST调用中将foreign_key baz_id绑定到Baz,它失败了,试图存储的实例化错误。

POST http://localhost/foo/api/v1/bars
{
"baz_id" : "1",
"weight" : "1.0"
}
@NotNull
@ManyToOne
@JoinColumn(name = "baz_id", nullable = false, referencedColumnName = "id")
private Baz baz;

您的JSON对于映射的对象是不正确的。它的格式应该是:

{
"baz" : {"id":"1"},
"weight" : "1.0"
}

这将允许Spring构建一个bar实例,该实例引用id为1的Baz实例。

或者,如果您使用

{
"baz_id" : "1",
"weight" : "1.0"
}

你的Java实体需要在其中定义一个'baz_id'属性:

@Transient
private String baz_id;

然后你的控制器使用它来决定如何处理这个值;在保存Bar实例之前,使用适当的findbyId方法来设置baz引用——这也给了你验证它是否存在的机会,并决定如果它不存在该怎么做;创建一个新的或抛出一个适当的异常。

或者,您可以将String基本映射到列,并仅使用它来设置值:

@ManyToOne
@JoinColumn(name = "baz_id", referencedColumnName = "id", insertable=false, updatable=false, fetch = FetchType.LAZY )
@JsonIgnore
private Baz baz;
@Column(name = "baz_id", nullable = false)
private String baz_id;

这将允许您为REST api使用baz_id,但为连接和其他应用程序使用baz引用。

最新更新