Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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 Hibernate:空外键,或OneToOne相关实体的重复外键_Java_Hibernate_Orm - Fatal编程技术网

Java Hibernate:空外键,或OneToOne相关实体的重复外键

Java Hibernate:空外键,或OneToOne相关实体的重复外键,java,hibernate,orm,Java,Hibernate,Orm,首先,在“select*fromPARENT”类型的查询中获取一个hibernate异常,该异常表示在CHILD表中有多个条目具有相同的[foreign]键,该键应该是唯一的。这是一个转移视线的问题,子表没有这样的条目。我把桌子擦干净,接着又犯了同样的错误,这次又把另一个孩子称为罪犯。事实上,另一个孩子只有一行 在这里,子表表存储持久的@实体,它们与父表@实体具有双向的@OneToOne关系 注意:PARENT表有一个主键,PARENT\u PK,并且在所有“Children”上都有一个PARE

首先,在“select*fromPARENT”类型的查询中获取一个hibernate异常,该异常表示在CHILD表中有多个条目具有相同的[foreign]键,该键应该是唯一的。这是一个转移视线的问题,子表没有这样的条目。我把桌子擦干净,接着又犯了同样的错误,这次又把另一个孩子称为罪犯。事实上,另一个孩子只有一行

在这里,
子表
表存储持久的
@实体
,它们与父表
@实体
具有双向的
@OneToOne
关系

注意:PARENT表有一个主键,
PARENT\u PK
,并且在所有“Children”上都有一个
PARENT\u PK
列,该列指向“拥有”子项的父项

我认为问题可能是由于关系的双向性造成的;如果可能的话,我应该让它们是单向的。好的,因为我不需要双向性,所以我更改了注释并使关系单向。现在“获取所有”类型的请求工作正常-但是现在更新父级、添加新的子级都失败了,出现了一个
ConstraintViolationException:ORA-01400:无法将NULL插入子级。PARTNER_PK

我还发现了这篇文章:

它声称,当外键位于“子”表中时,不支持单向关系,该表中的对象关系是从父对象到子对象的单向关系。不过,目前还不清楚如何解决这个问题

我正在寻找以下任一解决方案:

1) 如何修复双向映射以避免虚假的“重复id”异常 2) 如何在不改变模式的情况下使关系单向

代码片段:

这是在
父项中定义关系的方式:

这就是孩子身上的东西:

,(+所有的接受者/接受者)

尝试更改单向关系后,子类根本没有父类。父类现在如下所示:


放弃了一对一的单向性,固定了双向性,如下所示:

在父类中:

儿童班:

但仍然不确定问题的真正原因是什么=(

@OneToOne(mappedBy = "parent",
        cascade = CascadeType.ALL,
        fetch = FetchType.EAGER,
        orphanRemoval = true)
private Child child;
@OneToOne
@JoinColumn(name="PARTNER_PK")
private Parent parent;
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true)
@JoinColumn(name = "PARENT_PK")
private AddressDO address;
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "parent", orphanRemoval = true)
private Child child;
@OneToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "PARENT_PK", insertable = true, updatable = false, nullable = false)
private Parent parent;