2011-11-14 9 views
0

私はプロバイダとして休止状態のjpa2によってマッピングされた〜10のクラスからなる小さなスキーマを持っています。すべてのクラスは同じ基本的な方法でビルドされています(@Id@GeneratedValueのIDのクラスの@Entity注釈)。すべてのクラスにはデフォルトのコンストラクタとデフォルトのgetter/setterがあります。JPA2でスキーマを作成する際に、1つのエンティティが無視されるのはなぜですか?

クラスのうちの1つを除くすべてが(関連付けまたは継承を介して)互いに関連しています。この1つのクラスは、スキーマ生成プロセス中にデータベースに作成されたデータベーステーブルを取得しません。

私はhbm2ddl.autoで以下の設定を試してみた:

を作成:すべてのテーブルが、1つが作成されます。最初にエンティティにアクセスすると、例外がスローされます。com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table '...' doesn't exist(またはコードがOracle DBで実行されている場合は同等のオラクル)

:hibernateは、スキーマの検証中に不足しているテーブルについて不平を言っています。

更新:テーブルが作成されず、そのクラスのエンティティが初めてアクセスされたときにテーブルがスローされます(createと同様)。

誰もがこれについて考えていますか?

+0

失敗したエンティティのソースコードを投稿できますか? – nfechner

+0

Hibernate固有の設定、またはJPAの 'persistence.xml'形式を使用していますか?あなたの質問に設定を含めてください。 –

答えて

1

以下を試してください。idフィールドのみを持つようにそのエンティティのクラスを変更してください。 idフィールドに@Idというアノテーションが付けられている場合、そのクラスに@Entityアノテーションが付いていることを確認してください。このエンティティがマップされたクラスのリストで宣言されていることを確認してください(またはマップされたパッケージの中で宣言されているパッケージ内にある)。 log4j.xml経由で "TRACE"レベルのロギングを "org.hibernate"に追加してください。ハイバーネーションセッションを開始し(アプリケーションを起動する)、スキーマの作成のためにHibernateが生成するステートメントをログで調べます。そこからテーブルが見つからない場合は、Beanを正しく設定しておらず、休止状態ではモデルの一部として考慮していません。対応するテーブルを作成するためのsqlがそこにありますが、実行時にエラーがある場合は、SQLに実際に含まれているものを参照してください。これは、hibernateが好きでないものを見つけるのに役立ちます。 "空の" Beanが最終的に作成されたら、プロパティ/アソシエーションを一度に1つずつ追加して、以前と同じチェックをやり直してください。ある時点では、特定のものを追加するときにエラーが発生し、そこから解決策を探す必要があります。

+0

私は違う方法で間違いを見つけましたが、あなたの提案は解決策にもつながっていました。どうもありがとう。 – Jonathan

0

愚かな、愚かな私。クラスのメンバ変数の名前としてsql-keyword(update)を使用しました。

私はORA-01747メッセージが失敗した選択について教えてくれると思っていましたが、実際には表が全く作成されなかった理由を実際に指摘していました。

関連する問題