Hibernate:为OneToOne相关实体提供null外键或重复外键

时间:2014-03-27 22:33:55

标签: java hibernate orm

开始在"从 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;

1 个答案:

答案 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;

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