当前位置: 首页 > 知识库问答 >
问题:

使用共享id和cascade=all的JPA/Hibernate试图在父级之前保存子级,导致外键冲突

吴品
2023-03-14

我将JPA与Hibernate一起使用。我有一个1对1的父子关系(子是可选的),两者之间共享id,子表上有一个外键关系。我的实体如下所示:

public class LogItemEntity {
...

    @OneToOne(cascade={CascadeType.ALL}, mappedBy = "logItem", orphanRemoval=true, optional=true)
    @PrimaryKeyJoinColumn(referencedColumnName="ral_id")
    private LogAdditionalRequirement additionalRequirement;
...
}
public class LogAdditionalRequirement {
...
    @Id
    @GeneratedValue(generator = "foreign")
    @GenericGenerator(name = "foreign", strategy = "foreign", parameters = { @Parameter(name = "property", value = "logItem") })
    @Column(name = "ral_id")
    private Long id;

    @OneToOne(optional=false)
    @PrimaryKeyJoinColumn(referencedColumnName="id")
    private LogItemEntity logItem;
...
}
ERROR o.h.util.JDBCExceptionReporter - ERROR: insert or update on table "rar_log_additional_requirement" violates foreign key constraint "fk_rar_ral_id"
Detail: Key (ral_id)=(70150) is not present in table "ral_log".

共有1个答案

詹杰
2023-03-14

一个解决方案是删除级联“cascade={cascadetype.all}”

这里有更多关于这个主题的信息

 类似资料:
  • 我以这种方式在实体结构中使用Joined Hibernate继承映射: 我想先保存一个用户,然后在另一个api中保存一个客户,并将该客户映射到第一个用户。所以我尝试用现有的用户id保存一个新客户: 但是,hibernate使用新生成的id(而不是固定传递的id)生成客户,并生成一个新用户。我的问题是:我怎样才能在孩子的父母之后救他?还是反正又有没有救孩子不救父母?

  • 问题内容: 我有一个关于从子实体ir引用ParentEntities的问题,如果我有这样的事情: Parent.java: 和Child.java: 将创建以下表: 好的,到目前为止,一切都很好。但是,当涉及到使用Java的Reference时,我想,您可以做这样的事情。 这导致在数据库中: 但是事实并非如此,您必须明确地将“父级”设置为“子级”(我认为框架可能可以单独执行)。 因此,数据库中真正

  • 当我读到cascade和inverse时,有人说它们都在做完全不同的事情。级联:在级联中,在一个操作(保存、更新和删除)完成后,它决定是否需要调用其他操作(保存、更新和删除)对其他相互有关系的实体。反向:这用于决定哪一方是管理关系的关系所有者(插入或更新外键列)。 假设我保存有一些孩子的父级。所以当我一方面用inverse="true"cascade="all"设置一对多时,我希望孩子是关系的所有

  • 在我的jpa映射中,我试图将带有一个主键的父类映射到带有复合键的子类,但似乎插入了错误的表,它已经生成了2个表,但不幸的是我没有绑定外键(policy_value_summary_id) 我试图用策略值(子类)保存策略摘要值(父),如下所示 下面是输出给我的错误

  • 父级 子 在数据库子表中有一列ParentId->典型的一个(父)->多个(子)关系 现在我创建了两个实体 null 我总是需要同时创建密钥OneToMany和ManyToOne的两个部分吗?还是我可以只创建ManyToOne,而不关心我有孩子的父对象? 什么会导致Hibernate给我一条消息,即没有子级的父级违反外键约束?

  • 问题内容: 假设我们有3个Entities对象类: 如何使用JPA2.x(或hibernate)批注来: 父级删除时(一对多)自动删除所有子级 删除后自动从子级列表中删除子级(多对一) 儿童删除时(一对一)自动删除玩具 我正在使用Hibernate 4.3.5和mysql 5.1.30。 谢谢 问题答案: 如本文所述, 实体状态转换应从父级到子级联,而不是相反。 您需要这样的东西: