0

プロバイダーとして休止状態を使用してjpa2によってマップされた〜10個のクラスで構成される小さなスキーマがあります。すべてのクラスは、同じ基本的な方法で構築されます (@Entityクラスの注釈、 id@Idおよび@GeneratedValue)。すべてのクラスには、デフォルトのコンストラクターとデフォルトの getter/setter があります。

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

で次の設定を試しましたhbm2ddl.auto

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

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

update : テーブルは作成されず、そのクラスのエンティティが最初にアクセスされたときに例外 (作成と同様) がスローされます。

誰かこれについて何か考えがありますか?

4

2 に答える 2

1

次のことを試してください: そのエンティティのクラスを変更して、id フィールドのみを持つようにします。id フィールドに @Id のアノテーションが付けられているクラスに @Entity のアノテーションが付けられていることを確認してください。このエンティティが、マップされたクラスのリストで宣言されていることを確認してください (または、マップされたパッケージ間で宣言されているパッケージ内にあることを確認してください)。log4j.xml を介して「TRACE」レベルのロギングを「org.hibernate」に追加します。Hibernate セッションを開始 (アプリを開始) し、スキーマの作成のために Hibernate が生成するステートメントをログで確認します。そこにテーブルがない場合は、Bean を正しく構成していないため、休止状態はそれをモデルの一部と見なしていません。対応するテーブルを作成するためのSQLはあるのに、実行するとエラーになる場合、そのSQLが実際に何を含んでいるのかを見て、これは、休止状態が気に入らないものを見つけるのに役立つ場合があります。「空の」Bean が最終的に作成されたら、一度に 1 つずつプロパティ/関連付けの追加を開始し、前と同じチェックをやり直します。ある時点で、特定のものを追加するとエラーが発生し、そこから解決策を探す必要があります。

于 2011-11-14T14:53:29.883 に答える
0

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

ORA-01747 メッセージは、失敗した選択について教えてくれるものだと思っていましたが、よく見ると、テーブルがまったく作成されなかった理由を実際に指摘していることが明らかになりました。

于 2011-11-14T14:59:08.727 に答える