Hibernate保存子实体而不插入父项

时间:2017-04-03 16:42:35

标签: hibernate spring-mvc

我想插入一个新的子记录,其中父关系已经存在于数据库中,而不必先通过查询获取父级,然后插入新的子级。

示例:我有一个产品实体,其拥有包含现有Catalog实体的ManyToOne:

@NotNull
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "catalog_id",
  referencedColumnName = "id", foreignKey = @ForeignKey(name = "FK_product_catalog"))
private Catalog catalog;

我希望能够在目录中插入新产品,而无需先查询目录以填满新产品实体。

事实上,我在restController中的POST中接收了一个json,Json包含product属性和目录id。

这是Json:

{
  "id":1,
  "attribute1":"value",
  "catalog":{"id":1}
}

一旦发生序列化,就会正确形成Product实例,其中包含一个只有id字段值的Catalog实例。

我在插入时收到此消息:

  

尝试保存一个或多个具有不可为空的实体   与未保存的瞬态实体的关联

我理解为什么我收到这条消息,我也可以从数据库中获取Catalog行,但这意味着我每次插入一个没有任何意义的子行时都要查询所有父项,因为我'我实际上只插入一个带有外键引用的行。

有人知道如何防止这种行为吗?

1 个答案:

答案 0 :(得分:0)

为什么不为catalog_id创建单独的属性并在其中放置@NotNull约束而不是Catalog对象属性?