我在記憶體資料庫中使用 h2,我有小型 spring boot 應用程式。嘗試運行測驗時出現錯誤:
java.lang.IllegalStateException: Failed to load ApplicationContext
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: Invocation of init method failed; nested exception is org.flywaydb.core.internal.command.DbMigrate$FlywayMigrateException: Migration V1.0.1__create_authorities_table.sql failed
-----------------------------------------------------
SQL State : 90057
Error Code : 90057
Message : Constraint "PRIMARY KEY | UNIQUE (USERNAME)" not found; SQL statement:
所以它說 Flyway 無法建造它。我只有兩個 sql 檔案:
V1.0.0__create_user_table.sql
CREATE TABLE users
(
id IDENTITY PRIMARY KEY,
username VARCHAR(50) NOT NULL,
password VARCHAR(68) NOT NULL,
enabled BOOLEAN NOT NULL
);
和V1.0.1__create_authorities_table.sql:
CREATE TABLE authorities (
username VARCHAR(50) NOT NULL,
authority VARCHAR(50) NOT NULL,
FOREIGN KEY (username) REFERENCES users(username)
);
CREATE UNIQUE INDEX ix_auth_username on authorities (username,authority);
我看到 Flyway 不喜歡FOREIGN KEY (username) REFERENCES users(username),所以我也嘗試過,ALTER TABLE authorities ADD FOREIGN KEY (username) REFERENCES users(username)但仍然無法正常作業。我檢查了當我洗掉添加時FOREIGN KEY測驗是綠色的 - 沒有錯誤。
似乎從這兩種方式:https : //stackoverflow.com/a/41515905/4952262 對我來說都失敗了 - 我在這里做錯了什么?
uj5u.com熱心網友回復:
參考約束可能只參考唯一的列集,它們需要主鍵或唯一約束,因此您需要創建唯一約束users(username)以允許從參考約束參考此列。
您可以簡單地在此列的定義中添加一個行內約束:
CREATE TABLE users
(
…
username VARCHAR(50) NOT NULL UNIQUE,
…
最好username從表中洗掉列authorities并添加類似的東西user_id BIGINT REFERENCES users(id)而不是它,但是,表之間的長值重復不是一個好習慣。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/525615.html
標籤:数据库弹簧靴h2
