找不到父密钥,我不确定为什么
Parent key not found and I'm not sure why
这是我遇到的错误!这是我尝试更新 sql MY_TABLE table 中的一些值的时候!忽略拼写!我在其他地方看到的完整性约束是我正在尝试输入父 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);
}
});
}
}
看起来你已经在你的代码中解决了它,但是下次你运行在Oracle数据库中遇到这个问题你可以从数据字典中找到答案。
转到错误信息:
ORA-02291: integrity constraint (MY.FK_MY_TABLE) violated - parent key
not found
从括号中获取约束所有者和名称,MY.FK_MY_TABLE
然后在数据字典中查找。
使用您的应用使用的相同凭据登录数据库。
select * from all_cons_columns where owner = 'MY' and CONSTRAINT_NAME = 'FK_MY_TABLE'
这应该会向您显示造成您困扰的 table 名称和列。
还有一个 all_constraints
视图,但不会告诉您列名。
这是我遇到的错误!这是我尝试更新 sql MY_TABLE table 中的一些值的时候!忽略拼写!我在其他地方看到的完整性约束是我正在尝试输入父 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);
}
});
}
}
看起来你已经在你的代码中解决了它,但是下次你运行在Oracle数据库中遇到这个问题你可以从数据字典中找到答案。
转到错误信息:
ORA-02291: integrity constraint (MY.FK_MY_TABLE) violated - parent key not found
从括号中获取约束所有者和名称,MY.FK_MY_TABLE
然后在数据字典中查找。
使用您的应用使用的相同凭据登录数据库。
select * from all_cons_columns where owner = 'MY' and CONSTRAINT_NAME = 'FK_MY_TABLE'
这应该会向您显示造成您困扰的 table 名称和列。
还有一个 all_constraints
视图,但不会告诉您列名。