2010-12-20 18 views
8

設定hibernate.cfg.xmlで、私は追加します <property name="hibernate.hbm2ddl.auto">create</property> 私はアプリケーションを実行すると自動的にテーブルを作成しますか?しかし、私はdrop table sqlを実行してデータベースから手動でテーブルを削除します。次に、休止状態のアプリケーションを再度実行します。 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:例外はによって引き起こさhibernateテーブルが存在しませんエラー

見えるテーブル「test.personか」の問題を解決する

唯一の方法は、MySQLを再起動しているが存在しませんデータベース。誰も私のためにこの問題を説明できますか?

これは

<hibernate-configuration> 
<session-factory> 
    <property name="hibernate.connection.driver_class"> 
     com.mysql.jdbc.Driver 
    </property> 
    <property name="hibernate.connection.url"> 
     jdbc:mysql://localhost/test 
    </property> 
    <property name="connection.username">root</property> 
    <property name="connection.password">root</property> 
    <property name="dialect"> 
     org.hibernate.dialect.MySQLDialect 
    </property> 


    <!-- Drop and re-create the database schema on startup --> 
    <property name="hibernate.hbm2ddl.auto">create</property> 

    <!-- Enable Hibernate's automatic session context management --> 
    <property name="current_session_context_class">thread</property> 

    <!-- Disable the second-level cache --> 
    <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property> 

    <!-- Echo all executed SQL to stdout --> 
    <property name="show_sql">true</property> 

    <!-- Mapping files --> 
    <mapping resource="com/mapping/Event.hbm.xml" /> 
    <mapping resource="com/mapping/Person.hbm.xml"/> 
</session-factory> 

Thxを

+0

どのようにテーブルを削除していますか?アプリケーションやコマンドラインで?あなたはドロップ後にあなたのアプリケーションを停止していますか?返信は –

+0

Thxです。私はアプリケーションではなく、コマンドラインを実行してテーブルを削除します。ちなみに、私はアプリケーションでテーブルを作成した後、別の操作をアプリケーションで実行したいときに見つけます。例外もスローされます。どんな手掛かり? – EeE

答えて

11

私が使用しているとは思わないcreateは、削除したテーブルを再追加するためにインプレーススキーマを更新します。試してみてください:

<property name="hibernate.hbm2ddl.auto">update</property> 

これは1が存在しない場合は、スキーマを作成し、あなたが定義したマッピングと一致するように、既存のものを変更しようとしています。

また、すべての可能な値については、this questionとお読みください。

+0

はい私は更新に変更します。しかし問題はまだそこにある。私はテーブルを再追加したいが、 "テーブル 'test.person'は存在しない";テーブルは自動的に追加されます。それから私は私のSQLサーバーを再起動する必要があります。それから私はテーブルを追加することができます。私はトランザクションの後にcommit()とclose()を実行すると思います。しかし、最初の操作がテーブルを作成した後、それは "テーブル 'test.person'が存在しない例外をスローし続けます。 – EeE

+0

テーブルのドロップを止めますか?データを削除する場合は、代わりにDELETE FROMを使用してください。 – OrangeDog

+2

テーブルのすべての行だけを削除する場合は、TRUNCATE TABLE test.personを使用します。 – Jeshurun

5

は "財産" と "名" の間にスペースがある私のhibernate.cfg.xmlのでしょうか?

<propertyname="hibernate.hbm2ddl.auto">create</property> 

そうでない場合は、おそらく問題です。また、「MySQLデータベースを再起動する」ときに修正されるということは何ですか?これは、MySQLサーバーを再起動するだけであることを意味しますか?つまり、手動でテーブルを再作成する必要がありますか?また、上記のXML抜粋が実際に "property"と "name"の間にスペースを含んでいる場合は、休止ログを除いて、特にそれが特定したすべてのプロパティをリストする部分も提供してください。

+0

ところで、私が話しているログエントリは次のようになります:01:30:08,032 INFO環境:リソースから540ロードされたプロパティhibernate.properties:{url = jdbc:hsqldb:hsqldb/hibernate、hibernate.connection .driver_class = org.hsqldb.jdbcDriver、hibernate.cache.provider_class = org.hibernate.cache.HashtableCacheProvider、schema =、hibernate.cache.use_query_cache = true、hibernate.dialect = org.hibernate.dialect.HSQLDialect、username = sa、 hibernate.jdbc.use_streams_for_binary = true ... – jpkrohling

+0

タイピングが行えないのは残念です。例外がスローされたら、MySQLサーバを再起動します。しかし、その後、私はアプリケーションでテーブルを作成します。私は、読み取り、更新操作などのさらなる操作を実行したい。 "テーブル 'test.person'が存在しません"例外スロー – EeE

+0

プロパティ名から "hibernate"接頭辞を削除できますか? IIRCでは、cfg.xmlファイルでは無効で、.propertiesファイルにのみ必要です。また、してください – jpkrohling

2

私はこの同じ問題を抱えていました。私は文字列フィールドのauto_increment(私はMySQLの方言を使用していた)を使用していることに気付きました。私は問題を解決したintに変更しました

+0

今日も同じ問題がありました。 SQLExceptionを使用すると、テーブルが存在しないことを示すだけで、テーブルを作成できなかった理由(Hibernateの設定、カラムのタイプなど)は表示されません。 – Yassir

関連する問題