无法存储实体的 ManyToOne 关联

Unable to store ManyToOne association for an entity

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

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 构建一个引用 ID 为 1 的 Baz 实例的 bar 实例。

或者,如果您使用

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

您的 java 实体需要在其中定义 'baz_id' 属性:

@Transient
private String baz_id;

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

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

@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;

这将允许您将 baz_id 用于 REST api,但将 baz 参考用于连接和其他应用程序用法。