問題內容:
在一個hibernate項目中,爲一個Model類添加一個多對一的配置,在進行功能調試的時候報如下錯誤。
Caused by: com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (t_project_case_main
, CONSTRAINT FK_aaxgqh0eu7cwdq1ku8jv2k3db
FOREIGN KEY (ATTACH_ID
) REFERENCES t_project_case_main
(CASE_ID
))
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:931)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2941)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1623)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1715)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3249)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1268)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1541)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1455)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1440)
問題分析:
從錯誤日誌中我們發現他提示我們 我們有一個外鍵FK_aaxgqh0eu7cwdq1ku8jv2k3db `t_project_case_main 外鍵id 是ATTACH_ID 但是涉及到的應該是 CASE_ID 纔對。
我有去看了一個項目中的hbm.xml的配置。
內容如下:
<many-to-one name="attach" class="com.bwol.pm.project.entity.CaseMain" fetch="select">
<column name="ATTACH_ID" precision="16" scale="0" />
</many-to-one>
我配置class中com.bwol.pm.project.entity.CaseMain根本沒有ATTACH_ID
解決方式:
我想在CaseMain的hbm.xml配置一個Attach的多對一關係 也就是 一個Attach 有多個CaseMain,發現在配置的時候由於複製粘貼的關係忘記修改 class 爲 Attach類的路徑了,具體修改如下:
<many-to-one name="attach" class="com.bwol.pm.project.entity.Attach" fetch="select">
<column name="ATTACH_ID" precision="16" scale="0" />
</many-to-one>
修改後問題成功解決。