找不到父键,我不知道为啥

Posted

技术标签:

【中文标题】找不到父键,我不知道为啥【英文标题】:Parent key not found and I'm not sure why找不到父键,我不知道为什么 【发布时间】:2019-08-08 16:50:56 【问题描述】:

这是我得到的错误!这是我尝试更新我的 sql MY_TABLE 表中的一些值的时候!忽略拼写!我在其他地方看到的完整性约束是我试图输入父表中不存在的值!我只是不确定那是哪个值!

integrity constraint (MY.FK_MY_TABLE) violated - parent key not found
; nested exception is java.sql.SQLIntegrityConstraintViolationException: ORA-02291: integrity constraint (MY.FK_MY_TABLE) violated - parent key not found
@Component
public class JdbcTemplates 

    private JdbcTemplate insertTemplate;

    @Value("$TS_ID")
    private String someId;

    private static final String INSERT_QUERY = "INSERT INTO MY_TABLE (CFN_NO,CS_D,SOME_CONSTANT," +
            "A_NO,R_NO,B_NAME,O_ID,C_ID,A_TYPE,B_STATUS,R_PAGE,R_DATETIME," +
            "T_S_RESULTS,D_CNT,B_ACCT_NO,ACC_TYPE,A_F_ID,A_C_ID,AP_ID) " +
            "VALUES(?,?,?,?,?,?,?,?,?,?,?,SYS_DATE,?,?,?,?,?,?,?)";

    @Resource(name = "dataSource")
    private DataSource dataSource;

    @PostConstruct
    public void init() 

        this.insertTemplate = new JdbcTemplate(this.dataSource);
    

    public void insertActivity(final String cnfNumber, final Act act)

        insertActivityTemplate.update(INSERT_QUERY, new PreparedStatementSetter() 

            @Override
            public void setValues(PreparedStatement ps) throws SQLException 
                ps.setString(1, cnfNumber);
                ps.setString(2, act.getCSId());
                ps.setString(3, DAOConstants.SOME_CONSTANT);
                ps.setString(4, act.getAccNumber());
                ps.setString(5, act.getRNumber());
                ps.setString(6, act.getBName());
                ps.setString(7, act.getOId());
                ps.setString(8, act.getCId());
                ps.setString(9, activity.getAType().getTCode());
                ps.setString(10, YesNo.NO.getSLabel());
                ps.setInt(11, act.getRPage());
                ps.setInt(12, act.getTResults());
                ps.setInt(13, act.getDDataCount());
                ps.setString(14, act.getBNumber());
                ps.setString(15, act.getAType());
                ps.setString(16, act.getAId());
                ps.setString(17, act.getAId());
                ps.setString(18, tSId);
            

        );
    

【问题讨论】:

FK 是哪个字段?您应该检查您尝试添加的 FK 是否存在于引用的表中。 FK 我相信只是意味着外键!不与任何值关联 此约束错误意味着您正在尝试添加外键,但引用的表中不存在该值。 有没有办法判断哪个是外键!对 SQL 和 JDBC 来说相当新 这些表是您创建的吗?如果是的话,你会拥有你曾经这样做过的脚本吗? 【参考方案1】:

看起来您已经在代码中对其进行了整理,但是下次您在 Oracle 数据库中遇到此问题时,您可以从数据字典中找到答案。

转到错误消息:

ORA-02291: 违反完整性约束 (MY.FK_MY_TABLE) - 父键 没找到

从括号中获取约束所有者和名称,MY.FK_MY_TABLE,然后在数据字典中查找。

使用您的应用使用的相同凭据登录数据库。

select * from all_cons_columns where owner = 'MY' and CONSTRAINT_NAME = 'FK_MY_TABLE'

这应该会向您显示导致您困扰的表名和列。

还有一个all_constraints 视图,但它不会告诉您列名。

【讨论】:

非常感谢!如果我处理 Oracle sql,我相信这将在不久的将来有所帮助。

以上是关于找不到父键,我不知道为啥的主要内容,如果未能解决你的问题,请参考以下文章

我在这个条件语句中找不到逻辑错误。我不完全知道我的逻辑在哪里不正确

为啥这个 pymongo 子文档找不到工作?

为啥这个 pymongo 子文档找不到工作?

为啥即使创建了对象,django 也找不到与查询匹配的任何对象

ORA-02291: 完整性约束;找不到父键错误

我不知道为啥会发生错误[重复]