HibernateおよびHSQLDBでテーブルが見つかりません
質問
hibernate entitymanagerを使用して、JPAを介してエンティティをマッピングしています。また、ユニットテストにはHSQLDBインメモリデータベースを使用しています。モデルへの最近のリファクタリングが開始されて次のエラーが発生するまで、すべては問題ありませんでした。
17:55:48.516 [main] WARN o.h.util.JDBCExceptionReporter - SQL Error: -22, SQLState: S0002
17:55:48.517 [main] ERROR o.h.util.JDBCExceptionReporter - Table not found in statement
問題のSQLを投稿することはできませんが、上記のエラーの考えられる原因に関するポインターを教えてもらえますか?特に、以前はコードが機能していたことがわかっているので。リファクタリングのために休止状態が無効なSQLを生成しているようです?
解決
さて、テーブルは実際にありますか? HibernateのSQL出力を有効にし、実際のデータベーススキーマに対してチェックします。
リファクタリングが失敗した可能性があります(エンティティとテーブルの名前が変更され、名前付きクエリは更新されませんでした)。
または、クラスパスのどこかに古いクラスがあり、誤った注釈が読み取られる可能性があります。
他のヒント
これは、JDBCドライバーとHibernateダイアレクトの不一致を示している可能性もあります。
これは、JDBCドライバー接続がHSQLDBであり、Hibernateダイアレクトがorg.hibernate.dialect.Oracle10gDialectであるときに取得しました。
対応する例外メッセージ: [エラー]:データベースのメタデータを取得できませんでした java.sql.SQLException:ステートメントにテーブルが見つかりません[select sequence_name from all_sequences]
この問題もありました。私の場合、エンティティにこのようなものがありました
@Column(name =" AVAIL_TARGET_PERCENT"、columnDefinition =" number(5,2)"、nullable = false)
columnDefinitionを避けてください(取り出してください!)、大丈夫です。私はそれをしました、そして問題は修正されました
同じ例外も発生していました。プロパティー hibernate.dialect がorg.hibernate.dialect.Oracle10gDialectとして設定され、H2データベースがデータソースとして機能することがわかりました。解決策はhibernate.dialectを削除し、値を使用しないことです。 Hibernateには、データソース構成から取得した方言ベースのメタデータを自動検出する機能があります
hibernateが方言を自動検出する方法の詳細については、
https://docs.jboss.org/hibernate /orm/3.6/reference/en-US/html/portability.html