我们有两个实体,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