【发布时间】:2021-06-09 07:36:07
【问题描述】:
我的父子单向关系如下:
@Entity
@Table(name = "PARENT")
public class Parent {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private int parentId;
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
@JoinColumn(name = "parent_id", nullable = false)
private List<Child> children;
}
@Entity
@Table(name = "CHILD")
public class Child {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private int id;
@Column(name = "PARENT_ID", insertable = false, updatable= false)
private int parentId;
//some other field
}
我创建了一个父实例,为其分配一个子列表并尝试将其持久化,它运行良好。
Parent p = new Parent();
List<Child> children = new ArrayList<Child>();
Child c = new Child();
children.add(c);
p.addChildren(children);
em.persit(p);
em.flush();
当我尝试通过子实体单独保存时,我看到插入查询正在尝试将 null 插入子表中的列 PARENT_ID 并导致
Child c = new Child();
c.setId(78987);
c.setParentId(12345);
em.persist(c);
em.flush();
独立于父表保存子实体时出现异常。我尝试插入的子实体与已经存在的父实体相关。
java.sql.SQLIntegrityConstraintViolationException: ORA-01400: cannot insert NULL into ("MY_SCHEMA"."PARENT"."PARENT_ID")_
将关系定义为单向后不能直接保存子实体吗?
【问题讨论】:
-
这可能是因为 '@Column(name = "PARENT_ID", insertable = false, updatable= false)' , insertable = false