我想使用一对一关系共享主键。
当 parent 被持久化时,他们的 child 也会被持久化(CascadeType.ALL)
这是我的代码
@Entity
@Table(name = "TB_PAR")
@Data
public class Par implements Serializable {
@Id
@Column(name = "ID")
@GeneratedValue(generator = "UUID")
@GenericGenerator(name = "UUID", strategy = "org.hibernate.id.UUIDGenerator")
private UUID id;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "ID", referencedColumnName = "ID")
private Child child;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Entity
@Table(name = "TB_CHILD")
public class Child implements Serializable {
@Id
@OneToOne
@JoinColumn(name = "ID", referencedColumnName = "ID")
private Par par;
}
//Session initialize
...
PAR par = new PAR();
Child child = new child();
par.setChild(child);
session.persist(par);
...
然后,打印一条警告,指出无法将空值插入到 id 列中。
(取决于rdbms/我的数据库是oracle,所以我可以看到ORA-01400)
我该如何修复它?
最佳答案
你可以尝试使用nullable=false
@JoinColumn(name = "ID", referencedColumnName = "ID", nullable=false)
关于java - 在 hibernate 中使用 onetoone 共享 pk,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59539073/