[英]Hibernate Check if DB exists
我正在使用initial.sql創建數據庫
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3310/mydb?createDatabaseIfNotExist=true&autoReconnect=true&useSSL=false</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">qet</property>
<property name="format_sql">true</property>
<property name="hibernate.hbm2ddl.import_files_sql_extractor">org.hibernate.tool.hbm2ddl.MultipleLinesSqlCommandExtractor</property>
<property name="hibernate.hbm2ddl.auto">create</property>
<property name="hibernate.hbm2ddl.import_files">/database/initial.sql</property>
它工作正常,但是現在的問題是我有數據庫,但是當我重新啟動應用程序時,它將插入更多數據。
如何檢查架構是否已存在,請不要執行任何操作。 我只想創建沒有任何表/不存在的數據庫...
嘗試切換屬性以進行更新
<property name="hibernate.hbm2ddl.auto">update</property>
Create每次都會重新創建它,而update僅在不存在時才創建它。 標准值可以在這里看到:
https://docs.jboss.org/hibernate/orm/5.0/manual/en-US/html/ch03.html
同樣從同一參考中我們可以看到,僅在hbm2ddl是create或create-drop時才執行導入文件
文件順序很重要,給定文件的語句在以下文件的語句之前執行。 這些語句僅在創建架構時執行,即,如果將hibernate.hbm2ddl.auto設置為create或create-drop。
如果您希望執行initial_sql ,則可以將其保留為create,並且可以使該SQL具有適當的命令,這些命令即使已經執行也不會更改狀態。 像DROP TABLE IF EXISTS
, CREATE TABLE IF NOT EXISTS
等。對於插入,它有點復雜,但是您仍然可以通過insert into table join the same table where value is not found
來執行此操作, insert into table join the same table where value is not found
但是,這並不是一個完美的解決方案,因為如果您從帶注釋的類中創建表,則將重新創建它們。 我認為您應該在初次部署時考慮其他設計或使用hibernate.hbm2ddl.auto = create,然后將其更改為手動更新
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.