2012-01-11 5 views
6

私はSeam 2.2ベースのJava EE 5 Webアプリケーションがあり、Hibernate 3.3.3経由でJPA 1.0のエンティティにマップされたテーブルがたくさんあります。開発中にTomcat 6、Oracle 10 XE、およびWindows 7で実行されています。JPAテーブルの代わりに同義語のEntiy

ここでは、操作部門から、すべてのデータベースオブジェクトの所有者である1つのスキーマ(myschema)と1つのスキーマアプリケーションのデータベースユーザー(myschema_app)として機能します。だから私は、次のようでした:

  • すべてmyschemaから必要なテーブル(両方の正規のものとn:M中間テーブル)のスキーマmyschema_app
  • 付与オブジェクト権限の作成(使用状況によってselectの一つ以上をしてシーケンスを、myschema_app
  • からinsertupdatedelete)が以前より同じ名前を使用するためにはmyschema_appでプライベート・シノニムを宣言し、
  • 他のスキーマの名前の接頭辞を隠す変化特性

でTomcatのデータソース定義でpersistence.xml

  • 変更ユーザー/パスワードで新しいスキーマ名にvalidatehibernate.hbm2ddl.autoセットを持ちながら、私は、アプリケーションを起動すると、フレームワークはEntityManagerFactoryを作成しようとしたとき、私は例外を取得テーブルが欠けていると私に伝えます。私は、myschema_appを接続したSQLツールでselect文を直接実行すると、すべて正常に動作します。

    シノニムを別のテーブルに使用することは、アプリケーションにとって透過的であることを理解しました。私が見落としているかもしれないアイデアは誰にもありますか?

  • 答えて

    8

    私の推測では、hbm2ddlはテーブル用とシノニム用ではなく、実際にテーブルがスキーマ内に存在するかのように機能するはずです。 hbm2ddlオプションを削除し、アプリケーションをテストしてみてください。

    EDIT:私の推測が真であると思われる:4.3.0のようhttps://forum.hibernate.org/viewtopic.php?p=2438033

    +0

    。もちろん、このパラメータを省略するとアプリケーションが機能しますが、起動時にスキーマを検証してアプリケーションに合っていることを確認することは、Hibernateがシノニムをサポートしていないことが残念です。 。 –

    +0

    テーブルタイプがハードコードされているhibernates org.hibernate.tool.hbm2ddl.DatabaseMetadataクラスに問題があります private static final String [] TYPES = {"TABLE"、 "VIEW"};実際にはどこにあるべきですか プライベート静的final String [] TYPES = {"TABLE"、 "VIEW"、 "ALIAS"、 "SYNONYM"}; – user482745

    関連する問題