Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 具有与共享主键的双向一对一关系的外键约束冲突_Java_Hibernate_Jpa_Sybase - Fatal编程技术网

Java 具有与共享主键的双向一对一关系的外键约束冲突

Java 具有与共享主键的双向一对一关系的外键约束冲突,java,hibernate,jpa,sybase,Java,Hibernate,Jpa,Sybase,我试图使用JPA在两个类之间创建一对一的关联,一个是父类,另一个是子类,并使用生成器确保它们具有相同的主键: @Entity public class TestFKParent { @Column(name="code", nullable=false) @Id private String code; @OneToOne(mappedBy="parent", targetEntity=TestFKChild.class, optional=fals

我试图使用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
}

我使用以下代码持久化对象:

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中,描述这种关系的正确方式是什么?

您已经提到,您正在尝试在父级和子级之间创建一对一关系

这里我想知道 为什么要将父类保留为子类中的memeber变量

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