我有一个对象“Instance”,里面有另一个对象“Course”。尝试持久保存新的Instance对象时,如果Course为null,则会出现以下错误:
java.lang.IllegalStateException: During synchronization a new object was found through a relationship that was not marked cascade PERSIST: null
以下是我的注释:
@OneToOne(cascade = CascadeType.REFRESH,optional=true)
public Course getCourse() {
return course;
}
我不明白为什么它试图坚持一些无效的东西。如果它为null,它应该在数据库中将该字段保留为null吗?
答案 0 :(得分:1)
我不明白为什么它试图坚持一些无效的东西。如果它为null,它应该在数据库中将该字段保留为null吗?
默认情况下,TopLink JPA假定实体的所有字段都是持久的。如果要指定非持久性实体的字段或属性,则需要使用@Transient
标记它(但这不是您想要的)。
所以,对我来说,这个错误是因为没有为OneToOne
实体中的Instance
结尾指定正确的级联类型。我不能说你为什么不使用ALL
,但至少需要添加PERSIST
。