我有一对多的父子关系,我只想将整个事情坚持一次。我遇到的问题是孩子里面有父母的ID,但是在持久化时,它无法获得该ID,因为它是生成的。这是我到目前为止的设置:
public class Parent
{
@Id
@GeneratedValue(generator = "parent-id-gen")
@GenericGenerator(name = "parent-id-gen", strategy = "increment")
@Column(name = "id", nullable = false)
private long ID;
// some other fields
@OneToMany(orphanRemoval = true, cascade = CascadeType.ALL)
@JoinColumn(name = "parent_id")
private List<Child> children;
}
public class Child
{
@Id
@GeneratedValue(generator = "child-id-gen")
@GenericGenerator(name = "child-id-gen", strategy = "increment")
@Column(name = "id", nullable = false)
private long ID;
@Column(name = "parent_id", nullable = false)
private long parentID;
// some other fields
}
数据库(PostgreSQL)看起来像这样,如果重要的话:
CREATE TABLE parent
(
id integer NOT NULL,
... other fields,
PRIMARY KEY (id)
);
CREATE TABLE child
(
id integer NOT NULL,
parent_id integer NOT NULL,
... other fields,
PRIMARY KEY (id),
UNIQUE (parent_id, ... other fields)
);
我只想做一个org.hibernate.Session.saveOrUpdate(parentObject)
,但它使我在子表上的唯一键失败,因为 parentID 一直设置为 0,而不是从父级生成的 ID。
有没有办法做到这一点?
我在想 Hibernate 先插入,然后用父 ID 更新子 ID,因此由于当前定义了数据库,因此无法执行此操作。结果我可能不得不删除唯一键,这很不幸......如果有办法解决这个问题,请告诉我!
编辑:添加了数据库信息,因为它可能是相关的。