2014-01-12 17 views
12

私はJavaEEの休止プロジェクトを持っていますHibernate自動作成データベース

そして私はデータベースとしてMySQLを使用しています。

初めてプロジェクトを実行すると、自動的にデータベースが作成されます。

これは私のhibernate.cnf.xmlです:

<?xml version='1.0' encoding='utf-8' ?> 

<!DOCTYPE hibernate-configuration PUBLIC 
     "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
     "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd" > 

<hibernate-configuration> 
    <session-factory> 
     <property name="connection.driver_class">com.mysql.jdbc.Driver</property> 
     <property name="connection.url">jdbc:mysql://localhost/InternetProject</property> 
     <property name="connection.username">root</property> 
     <property name="connection.password"></property> 
     <property name="connection.pool_size">10</property> 
     <property name="dialect">org.hibernate.dialect.MySQLDialect</property> 
     <property name="hibernate.hbm2ddl.auto">update</property> 
     <property name="show_sql">true</property> 
     <mapping class="entities.Business" /> 
     <mapping class="entities.Coupon" /> 
     <mapping class="entities.User" /> 
     <mapping class="entities.LastLogin" /> 
    </session-factory> 
</hibernate-configuration> 

私は、初めて別のコンピュータ上でこのプロジェクトを実行すると、どのように私は、データベースInternetProjectを作成することができますか?

設定ファイルによると、それはすでにそれを行う可能性がありますし、私はそれに気づいていないんだが...事前に おかげで、:)

答えて

9
<property name="hibernate.hbm2ddl.auto">create</property> 

+1

ありがとうございました!これと '更新'の違いはいつですか? – Billie

+2

createは新しいスキーマを作成し、更新はスキーマを探して更新を行います – tesnik03

+1

'udpate'の代わりに' create'を使うことができますか、それとも両方を使うべきですか? – Billie

5

のために複数のオプションがありますを行いますオートプロパティ。

  1. create - マッピングまたは注釈に対応する新しいテーブルを作成します。既存のテーブルとデータを削除します。
  2. update - 既存のデータとテーブルを保持します。スキーマを更新します。ここで私たちは代償を受けなければなりません。
  3. create-drop - 作成と同じですが、セッションが閉じられるとすべてが破棄されます。
  4. validate - マップまたは注釈でスキーマを検証または一致させます。本番環境では有効です。

    <!-- create create-drop validate update --> 
    <property name="hbm2ddl.auto">update</property> 
    

私はそれが役に立てば幸い。

23

はテーブルを作成します。しかし、それはデータベースを作成しません。接続URLを変更してデータベースを生成します。

<property name="connection.driver_class">com.mysql.jdbc.Driver</property> 
    <property name="connection.url">jdbc:mysql://localhost/InternetProject?createDatabaseIfNotExist=true</property> 
    <property name="connection.username">root</property> 
    <property name="connection.password"></property> 
    <property name="connection.pool_size">10</property> 
+0

プロパティ 'password'に値を入れると、自動的に設定され使用されますか? –

+1

はい。休止状態は自動的に実行されます。 –

5

Hibernateは、あなたのためだけのテーブルを、データベースを作成しません。データベースを作成するには、URLにパラメータを追加してMySQLが存在しない場合、作成するようにMySQLに指示する必要があります。例:

jdbc:mysql://db:3306/mydatabase?createDatabaseIfNotExist=true 
+0

私はこのソリューションが本当に好きですが、それは私のためには機能しません。私は 'com.mysql.cj.jdbc.exceptions.CommunicationsExceptionを得る:通信リンクの失敗' – codepleb

関連する問題