【问题标题】:integrity constraint violated - parent key not found on cascade违反完整性约束 - 在级联上找不到父键
【发布时间】:2019-10-03 16:38:33
【问题描述】:

当我尝试使用级联保存所有内部集合设置为“OneToMany”的实体时,它会返回错误。

错误:

o.h.engine.jdbc.spi.SqlExceptionHelper:SQL 错误:2291,SQLState:23000 o.h.engine.jdbc.spi.SqlExceptionHelper : ORA-02291: 违反完整性约束 (MACHINE.OFFICER_FK) - 未找到父键

@Entity(name = "GenInfo")
@Table(name = "GEN_INFO")
public class GenInfo {

    @Id
    @GeneratedValue(generator = "GEN_INFO_SEQ")
    @Column(name = "ID_GEN_INFO")
    Long id;

    @Column(name = "STREET_ADDRESSS")
    String streetAddress;

    @Column(name = "CITY")
    String city;

    @Column(name = "STATE_REGION")
    String stateOrRegion;

    @Column(name = "POSTAL_CODE")
    String PostalCode;

    @Column(name = "COUNTRY")
    String Country;

    @Column(name = "CONTACT_NAME")
    String ContactName;

    @Column(name = "CONTACT_TITLE")
    String ContactTitle;

    @OneToMany(mappedBy = "genInfo", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY)
    List<Officer> officerCollection;

}

@Entity(name = "Officer")
@Table(name = "OFFICER")
public class Officer {

    @Id
    @GeneratedValue(generator = "OFFICER_SEQ")
    @Column(name = "ID_OFFICER")
    Long id;

    @Column(name = "OFFICER_NUM")
    String officerID;

    @Column(name = "PERSON_ID")
    String personID;

    @Column(name = "OF_RANK")
    String rank;

    @Column(name = "STATUS")
    String status;

    @Column(name = "TITLE")
    String LongTitle;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "ID_GEN_INFO")
    private GenInfo genInfo;
}

这是带有一些休眠信息的日志

Hibernate: insert into gen_info (contact_name, contact_title, country, postal_code, city, state_region, street_addresss, id_gen_info) values (?, ?, ?, ?, ?, ?, ?, ?)
o.h.type.descriptor.sql.BasicBinder      : binding parameter [1] as [VARCHAR] - []
o.h.type.descriptor.sql.BasicBinder      : binding parameter [2] as [VARCHAR] - []
o.h.type.descriptor.sql.BasicBinder      : binding parameter [3] as [VARCHAR] - [France]
o.h.type.descriptor.sql.BasicBinder      : binding parameter [4] as [VARCHAR] - [92085]
o.h.type.descriptor.sql.BasicBinder      : binding parameter [5] as [VARCHAR] - [PARIS]
o.h.type.descriptor.sql.BasicBinder      : binding parameter [6] as [VARCHAR] - []
o.h.type.descriptor.sql.BasicBinder      : binding parameter [7] as [VARCHAR] - [Tour W, 102 terrasse Boieldieu]
o.h.type.descriptor.sql.BasicBinder      : binding parameter [8] as [BIGINT] - [11]
Hibernate: insert into officer (title, id_gen_info, officer_num, person_id, of_rank, status, id_officer) values (?, ?, ?, ?, ?, ?, ?)
o.h.type.descriptor.sql.BasicBinder      : binding parameter [1] as [VARCHAR] - [Chairman of the Board]
o.h.type.descriptor.sql.BasicBinder      : binding parameter [2] as [BIGINT] - [11]
o.h.type.descriptor.sql.BasicBinder      : binding parameter [3] as [VARCHAR] - [1597265]
o.h.type.descriptor.sql.BasicBinder      : binding parameter [4] as [VARCHAR] - [250881]
o.h.type.descriptor.sql.BasicBinder      : binding parameter [5] as [VARCHAR] - [1]
o.h.type.descriptor.sql.BasicBinder      : binding parameter [6] as [VARCHAR] - [Both]
o.h.type.descriptor.sql.BasicBinder      : binding parameter [7] as [BIGINT] - [135]
o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 2291, SQLState: 23000
o.h.engine.jdbc.spi.SqlExceptionHelper   : ORA-02291: integrity constraint (MACHINE.OFFICER_FK) violated - parent key not found

【问题讨论】:

  • 表 MACHINE 映射到哪个实体?似乎Officer 属性上没有级联导致刷新期间违反 FK 约束
  • 在这种情况下只执行了 2 个休眠操作,MACHINE 名称指的是我的数据库名称...我只有这 2 个表,分别称为 GEN_INFO 和 OFFICER
  • (显然,)这是一个常见问题解答。在考虑发布之前,请始终使用谷歌搜索您的错误消息或您的问题/问题/目标的许多清晰、简洁和准确的措辞,有或没有您的特定字符串/名称,并阅读许多答案。如果您发布问题,请使用一个短语作为标题。请参阅How to Ask 和投票箭头鼠标悬停文本。
  • 考虑到参数的绑定看起来是正确的,是不是你的约束定义有问题?您能否发布这些表的相关 DDL,包括约束?

标签: java oracle hibernate spring-boot foreign-keys


【解决方案1】:

您似乎持有父密钥信息 在名为officer 的表和名为officer_id(假设)的列中的gen_info 表的contact_name 列,并尝试将一个值插入到gen_info 中,该值与officer.officer_id 没有匹配值

【讨论】:

  • MACHINE 是数据库名称
  • OFFICER_FK 是我在表 OFFICER 中创建的 FK 的名称,以引用 GEN INFO 中的 ID
  • @MatheusCiaramella 然后,我假设officer.officer_id 是父键的表列组合。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-12
  • 1970-01-01
  • 1970-01-01
  • 2020-07-19
  • 2018-04-18
  • 2014-06-12
  • 1970-01-01
相关资源
最近更新 更多