【问题标题】:sharing pk using onetoone in hibernate在休眠中使用onetoone共享pk
【发布时间】: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)

我该如何解决?

【问题讨论】:

标签: java hibernate jpa one-to-one


【解决方案1】:

你可以试试 nullable=false

 @JoinColumn(name = "ID", referencedColumnName = "ID", nullable=false)

【讨论】:

  • 发生错误!试图从 null 一对一属性分配 id[~~~.Par]
【解决方案2】:

您可以尝试“派生身份”,您的代码将如下所示:

@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(mappedBy = "par", cascade = CascadeType.ALL)
    private Child child;
}


@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Entity
@Table(name = "TB_CHILD")
public class Child implements Serializable {

    @Id
    @Column(name = "ID")
    private UUID id;

    @OneToOne
    @MapsId
    private Par par;
}

在第 2.4.1 节的JPA 2.2 spec 中讨论了派生的身份(带有示例)。

【讨论】:

  • 发生错误!试图从 null 一对一属性分配 id[~~~.Par]
  • 我使用的是休眠 4.2 (jpa 2.0)。是这个问题吗?
猜你喜欢
  • 2011-02-25
  • 2020-08-03
  • 1970-01-01
  • 1970-01-01
  • 2014-03-27
  • 2011-02-13
  • 2010-10-20
  • 2012-08-11
  • 1970-01-01
相关资源
最近更新 更多