java - 在 hibernate 中使用 onetoone 共享 pk

标签 java hibernate jpa one-to-one

我想使用一对一关系共享主键。

当 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/

相关文章:

java - 使用 Java 求两个数中最小的一个 -

java - 实现接口(interface)的 Java 对象如何存储在内存中?

java - sql server 的连接 url

hibernate - 重复结果休息服务 Spring boot

java - 通过 Java Mail API 发送电子邮件时出错?

java - 我可以获取 map 的一部分并测试我使用的 key 吗?

java - com.mysql.jdbc.MysqlDataTruncation : Data truncation: Data too long for column 'DATE' at row 1

java - Hibernate ManyToMany 保存双方关系

hibernate - JPA/hibernate : select currval on non existing sequence/relation

java - 为什么在缺少 @Transactional 时没有抛出 TransactionRequiredException?