【发布时间】:2017-08-28 15:15:57
【问题描述】:
我想插入一个新的子记录,其中父关系已经存在于数据库中,而不必先通过查询获取父项,然后再插入新的子项。
示例:我有一个产品实体,它有一个 ManyToOne 和一个现有的 Catalog 实体:
@NotNull
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "catalog_id",
referencedColumnName = "id", foreignKey = @ForeignKey(name = "FK_product_catalog"))
private Catalog catalog;
我希望能够在目录中插入新产品,而无需先查询目录来填充新产品实体。
事实上,我在 restController 的 POST 中接收到一个 json,该 Json 包含产品属性和目录 ID。
这是 Json:
{
"id":1,
"attribute1":"value",
"catalog":{"id":1}
}
一旦发生序列化,Product 实例就会正确形成,其中包含一个只有 id 字段值的 Catalog 实例。
我在插入时收到此消息:
尝试保存一个或多个具有不可为空的实体 与未保存的临时实体关联
我明白为什么我会收到这条消息,我也可以从数据库中获取目录行,但这意味着我每次插入子行时都必须查询所有父母,这在设计上毫无意义,因为我真的仅插入具有外键引用的行。
有人知道如何防止这种行为吗?
【问题讨论】:
标签: hibernate spring-mvc