我使用 MariaDB 作為我的生產資料庫和一個 H2-Database 用于測驗目的。
我的問題:我有一個查詢來獲取如下所示的序列的下一個值:
Query query = this.entitymanager.createNativeQuery("select nextval(seq_stayId)");
這在 MariaDB 上運行良好,但在 H2-Database 上不起作用。但是,如果我將查詢更改為以下內容:
Query query = this.entitymanager.createNativeQuery("select nextval('seq_stayId')");
它適用于 H2-Database 但不適用于 MariaDB。我知道 MariaDB 不喜歡這些字串文字,但是我怎樣才能找到適用于兩個資料庫的解決方案?
如果你能幫助我,我會很高興。先感謝您!
uj5u.com熱心網友回復:
select next value for seq_stayId H2 和 MariaDB 都支持。
NEXT VALUE FOR sequenceName 是 SQL 標準的一部分,您確實應該使用它來代替各種特定于供應商的運算式,尤其是當您需要在不同的資料庫系統中執行相同的 SQL 時。
uj5u.com熱心網友回復:
您可以在 Spring Boot 中創建多個組態檔屬性并管理屬性檔案中的值
1:應用-mariadb.properties
next.value.native.query=select nextval(seq_stayId)
2:應用程式-h2db.properties
next.value.native.query=select nextval('seq_stayId')
那么你可以在你需要的類中使用@Value 注釋系結這個屬性
@Component
class YouClassName{
@Value("next.value.native.query")
private String nextValueQuery;
public void whatEverIsYourMethodName() {
Query query = this.entitymanager.createNativeQuery(nextValueQuery);
}
}
然后您可以根據您所需的環境激活您的資料庫組態檔。此外,如果您有特定于現有 dev/prod/test 或任何其他環境的資料庫,那么您可以直接在現有環境屬性檔案中使用該屬性
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/390984.html
