由于要保持的对象有一个维持旧化的对象导致,当时是在关系为many to one 时候导致,引导的那个one对象所有的属性都是null造成的,解决办法是配置cascade 关键字,级联操作。
JPA中有四种CASCADE类型:
**********PERSIST: 持久保存拥有的实体,也会持久保存该实体的属于相关数据。
**********MERGE:将分离的实体重新合并到活动的持久性上下文时,也会合并该实体的所有数据。
**********REMOVE:删除一个实体时候,也删除该实体的所有数据。
**********ALL:以上都适用。
我的例子是这样的:
@JsonIgnore
@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.EAGER)
@JoinColumn(name = "dynamic_id")
private DynamicPublish dynamicpublish;
今天JPA又报错了:
"The database returned no natively generated identity value; nested exception is org.hibernate.HibernateException: The database returned no natively generated identity value"
说是数据库没有使用native来从数据库 identity, sequence,和hilo中选取一个生成器来生成ID,这样就需要主键设置成自动增长类型的。
我在这个字段上使用了自动生成主键策略,然后就报错了,因为我在需求中使用的是自己制定的主键,所有不能再添加该注解来自动生成主键。
@Id
@Column(name = "comment_id")
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer commentId;