【问题标题】:Parent Key not found (ORA-02291)未找到父密钥 (ORA-02291)
【发布时间】:2016-10-08 17:37:24
【问题描述】:

在我的用户对象中,我有以下联接表:

@JsonIgnore
    @ManyToMany
    @JoinTable(
            name = "JHI_USER_AUTHORITY",
            joinColumns = {@JoinColumn(name = "user_id", referencedColumnName = "id")},
            inverseJoinColumns = {@JoinColumn(name = "authority_name", referencedColumnName = "name")})
    @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
    private Set<Authority> authorities = new HashSet<>();

我在用户对象上也有一个触发器,可以在创建行时插入主 ID

TRIGGER TRG_JHI_USER_ID
            BEFORE INSERT
            ON JHI_USER
            FOR EACH ROW
            DECLARE
            BEGIN
            SELECT SEQ_USER.NEXTVAL INTO :NEW.ID FROM DUAL;
            END TRG_JHI_USER_ID;

现在,当我创建用户时,出现以下异常:

Caused by: java.sql.SQLIntegrityConstraintViolationException: ORA-02291: integrity constraint (PORTALUSER.FK_USER_ID) violated - parent key not found

似乎在尝试持久化 User 对象时,它也会在执行触发器之前持久化我的多对多表,但如果理解正确,则找不到 user_id。如何在不挖掘复杂解决方案的情况下解决这个问题?

这发生在 Oracle 11 中。

这是模型:

【问题讨论】:

  • “portaluser”是所有者,如“PORTALUSER”。“JHI_USER_AUTHORITY”。
  • 我已经在描述中添加了模型
  • 对不起,我对 portaluser 是什么感到困惑。不过,触发因素不是问题。不知何故,jhi_user_authority 行被插入 之前jhi_user 行。你对此有控制权吗?你确定插入了jhi_user 行吗?
  • 我的控制器填充了一个新的用户对象,并使用 JPA 存储库来保存应该保留引用的多对多对象的用户。模型有帮助吗?
  • 如果我理解正确,jhi_userjhi_user_authority 行都由相同的代码/事务持久化?如果是这样,我不清楚您要插入什么 jhi_user_authority.user_id 值以及它如何可能是正确的。因为JHI_USERID 值是由插入触发器设置的,所以您的代码如何知道该值是什么,以便在插入jhi_user_authority 行期间正确设置它?

标签: sql jpa oracle11g spring-data jhipster


【解决方案1】:

JHipster 仅支持 Oracle 12。

您可以使用 JHipster 为 Oracle 支持选择的唯一配置是 Oracle 12c,这意味着它不适用于 Oracle 11。

请注意,开源项目很难支持专有的付费数据库,因此我们不会使用旧版本的 Oracle。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-12
  • 1970-01-01
  • 2020-07-19
  • 2018-04-18
  • 2014-06-12
  • 1970-01-01
相关资源
最近更新 更多