【发布时间】:2019-12-31 02:55:57
【问题描述】:
我想使用一对一的关系共享主键。
当父母被持久化时,他们的孩子也被持久化(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)
我该如何解决?
【问题讨论】:
-
您可以在这个问题中使用答案。您需要@MapsId 注释,它将一个表的pk 映射为pk 并将fk 映射到另一个表。stackoverflow.com/questions/59282221/…
标签: java hibernate jpa one-to-one