问题描述
在使用Spring Data JPA操作数据库的时候,实体类A中包含一个实体类B的属性,并使用@ManyToOne
注解表示多对一的关系,结果在插入一条实体类A的数据时,出现错误:
TransientPropertyValueException: object references an unsaved transient instance
解决
首先在网上查了很多文章,说是加上级联操作的注解,如下:@ManyToOne(cascade={CascadeType.PERSIST,CascadeType.MERGE})
然后看下这些注解表示的意思:
JPA 中定义了四种 CASCADE 类型:
* PERSIST:持久保存拥有方实体时,也会持久保存该实体的所有相关数据。
* MERGE:将分离的实体重新合并到活动的持久性上下文时,也会合并该实体的所有相关数据。
* REMOVE:删除一个实体时,也会删除该实体的所有相关数据。
* ALL:以上都适用。
发现并不是我想要的功能。
因为我的业务场景是,新增A的记录,关联上B中已有
的数据,所以对于B的数据,我是不希望进行增加删除操作。
最后最后,检查发现错误:
是因为要添加的数据A中的属性B,在数据库中没有!!
所以修改了一下A中的属性B的值,进行添加成功。小错误搞了好久,记录一下。