开始在"从 PARENT "中选择*来获取hibernate异常查询的类型,表示我在 CHILD 表中有多个具有相同[外部]键的条目,该键应该是唯一的。那是一个红色的鲱鱼 - CHILD 表没有这样的条目。我把桌子擦干净了,并继续犯同样的错误,这次引用 ANOTHER_CHILD 作为罪犯。实际上 ANOTHER_CHILD 只有1行...
此处,CHILD
table(s)存储持久性@Entity
(s),与 Parent {{1}处于双向@OneToOne
关系}}
注意: PARENT 表格中有一个主键@Entity
,所有"儿童"上都有一个PARENT_PK
列,指向父母入境,拥有'孩子。
有人向我建议,问题可能是由于关系的双向性造成的;如果可能的话,我应该让它们单向化。好吧,因为我并不真正需要双向性,所以我改变了注释并使关系成为单向的。现在"得到所有"一种请求工作正常 - 但现在更新 父,添加新孩子,失败的是PARENT_PK
我还发现了这篇文章: Target Foreign Keys, Primary Key Join Columns, Cascade Primary Keys
它声称当外键在" child"中时,不支持单向关系。 table,对象关系是从Parent到Child的单向关系。但是,它并不清楚如何解决它。
我正在寻找其中一种解决方案:
1)如何修复双向映射以避免伪造"重复id"例外 2)如何在不改变架构的情况下使关系单向化
.....
代码段:
这就是在ConstraintViolationException: ORA-01400: cannot insert NULL into CHILD.PARTNER_PK
:
Parent
这就是孩子们的想法:
@OneToOne(mappedBy = "parent", cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true) private Child child;
,(+所有getter / setter)。
尝试改变单向关系后,Child类根本没有父级。父类现在看起来像这样:
@OneToOne @JoinColumn(name="PARTNER_PK") private Parent parent;
答案 0 :(得分:0)
提出一对一的单向,并像这样修复双向:
在父类中:
@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;
仍不确定问题的真正原因是什么,但=(