从Hibernate 5.2.5.final升级到5.2.8.final重复主键问题

时间:2017-03-14 04:53:03

标签: hibernate duplicates upgrade one-to-one

我们有两个实体,A和B,A有一个B,它是由b_id映射的OneToOne。

@Entity
@Table(name = "A")
public class A
{
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY, generator = "IdOrGenerated")
  @GenericGenerator(name = "IdOrGenerated", strategy = "com.xxx.yyy.UseIdOrGenerate")
  @Column(unique = true, nullable = false)
  private String  id;  

  @OneToOne(cascade = CascadeType.ALL)
  @JoinColumn(name = "b_id")
  private B b;
}

@Entity
@Table(name = "B")
public class B
{
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY, generator = "IdOrGenerated")
  @GenericGenerator(name = "IdOrGenerated", strategy = "com.xxx.yyy.UseIdOrGenerate")
  @Column(unique = true, nullable = false)
  private String  id;  

  private String name;
}

数据库架构:

A {id,b_id}; PK:id; FK_B_ID - >表B'id B {id,name}; PK:id;

适用于Hibernate 5.2.5.final。当我们尝试升级到5.2.8.final时,得到错误:对于'PRIMARY'键重复输入'414b017c-c014-4344-99af-595f9a80a388'。

Hibernate似乎将b_id设置为A两次。

如果我们在B表上使用a_id将B映射到A,我们尝试过,它可以用于Hibernate 5.2.8.final

总结Hibernate 5.2.8.final: 1.通过子表上的父ID将一对一子映射到其父级,这是正常的; 2.通过父表上的子ID将一对一子映射到其父级,这会导致子级主键的重复ID。

以上两种情况都适用于Hibernate 5.2.5.final。

有关如何使案例2适用于Hibernate 5.2.8.final的任何想法?此时,我们不想更改数据库架构。

谢谢,Jing

0 个答案:

没有答案