gpt4 book ai didi

java - 与共享主键的双向一对一关系违反外键约束

转载 作者:行者123 更新时间:2023-12-01 05:52:19 25 4
gpt4 key购买 nike

我正在尝试使用 JPA 创建两个类之间的一对一关联,一个是父类,另一个是子类,并使用生成器来确保它们具有相同的主键:

@Entity
public class TestFKParent {

@Column(name="code", nullable=false)
@Id
private String code;

@OneToOne(mappedBy="parent", targetEntity=TestFKChild.class, optional=false)
@org.hibernate.annotations.Cascade({CascadeType.ALL})
@PrimaryKeyJoinColumn
private TestFKChild child;

// getters and setters
}

@Entity
public class TestFKChild {

@Column(name="id", nullable=false)
@Id
@GeneratedValue(generator="MyGen")
@org.hibernate.annotations.GenericGenerator(name="MyGen",
strategy="foreign",parameters = @Parameter(name = "property", value = "parent"))
private String ID;

@OneToOne(targetEntity=TestFKParent.class, optional=false)
@org.hibernate.annotations.Cascade({})
@PrimaryKeyJoinColumn
private TestFKParent parent;

// getters and setters
}

我使用以下代码保留对象:

public void testMerge() throws Exception
{
TestFKParent parent = new TestFKParent();
parent.setCode("foo");
TestFKChild child = new TestFKChild();
parent.setChild(child);
child.setParent(parent);

em.merge(parent);
}

但不幸的是我遇到了外键违规:

com.sybase.jdbc3.jdbc.SybSQLException: Foreign key constraint violation occurred, dbname =  'MYDB', table name = 'TestFKChild', constraint name = 'FKE39B2A659CF5145B'

查看日志,似乎它首先尝试保留子项,但在这个 TestFKChild 表中,我在 TestFKParent 父项上有一个外键。

在 JPA/Hibernate 中描述这种关系的正确方法是什么?

最佳答案

您提到您正在尝试在 parent 和 child 之间建立一对一的关系。

我想知道的是为什么要保留 Parent 类作为 Child 类中的成员变量?

关于java - 与共享主键的双向一对一关系违反外键约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4287023/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com