我有一個使用JPA和H2來存儲數據的Spring服務器。如何編輯列值避免外鍵錯誤
數據庫表使用這個類創建:
@Entity
public class parametros {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long id;
long idproject;
@ElementCollection(fetch=FetchType.EAGER)
List<String> answers = new ArrayList<String>();
public parametros(){
}
.../* gets and sets */
}
所以,JPA和H2自動創建和Table="parametros"
內的數據庫中的另一個Table="parametros_answers"
這樣的:
Table = "parametros"
ID | IDPROJECT
1 | 3
2 | 6
Table="parametros_answers"
PARAMETROS_ID | ANSWERS
1 | Masculine
1 | Female
1 | Other
2 | Cocacola
2 | Pepsi
因此,該系統是在Table = "parametros_answer"
中創建一個外鍵。
直到這一點都可以。當我嘗試編輯Table = "parametros"
的列值時,問題就出現了。我知道更改列值的唯一方法是使用UPDATE SET
語句。所以,當我嘗試做:
UPDATE PARAMETROS SET IDPROJECT=10 WHERE IDPROJECT=3
這個錯誤出現:
Error "DELETE FROM PUBLIC.PARAMETROS WHERE ID=? AND IDPROJECT=? , cause: "org.h2.jdbc.JdbcSQLException: Referential integrity constraint violation: ""FK_NFSJ58KBBAYJ84HFJLOCV9JEQ: PUBLIC.PARAMETROS_ANSWERS FOREIGN KEY(PARAMETROS_ID) REFERENCES PUBLIC.PARAMETROS(ID) (1)""; SQL statement: DELETE FROM PUBLIC.PARAMETROS WHERE ID=? AND EXTRA_CONF=? AND IDPROJECT=? AND MULTI_MAXIMUM=? AND MULTI_MINIMUM=? AND NOTE=? AND PERGUNTA=? AND TITLE=? AND TYPE=? [23503-187]"; SQL statement:
你確定你正在更新嗎?似乎你正在刪除一些記錄 –
是的,這對我來說也很奇怪。我只是在H2控制檯中執行'UPDATE PARAMETROS SET IDPROJECT = 10 WHERE IDPROJECT = 3' –
你使用的是什麼版本的h2? –