簡體   English   中英

休眠檢查數據庫是否存在

[英]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&amp;autoReconnect=true&amp;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

  • validate:驗證模式
  • update:如果有更改,則更新;如果不存在,則創建
  • 創建:從頭開始重新創建
  • create-drop:創建它,然后在關閉會話工廠時將其刪除

同樣從同一參考中我們可以看到,僅在hbm2ddl是create或create-drop時才執行導入文件

文件順序很重要,給定文件的語句在以下文件的語句之前執行。 這些語句僅在創建架構時執行,即,如果將hibernate.hbm2ddl.auto設置為create或create-drop。

如果您希望執行initial_sql ,則可以將其保留為create,並且可以使該SQL具有適當的命令,這些命令即使已經執行也不會更改狀態。 DROP TABLE IF EXISTSCREATE 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM