私は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
- から
insert
、update
、delete
)が以前より同じ名前を使用するためにはmyschema_app
でプライベート・シノニムを宣言し、 - 他のスキーマの名前の接頭辞を隠す変化特性
でTomcatのデータソース定義でpersistence.xml
validate
にhibernate.hbm2ddl.auto
セットを持ちながら、私は、アプリケーションを起動すると、フレームワークはEntityManagerFactory
を作成しようとしたとき、私は例外を取得テーブルが欠けていると私に伝えます。私は、myschema_app
を接続したSQLツールでselect文を直接実行すると、すべて正常に動作します。 シノニムを別のテーブルに使用することは、アプリケーションにとって透過的であることを理解しました。私が見落としているかもしれないアイデアは誰にもありますか?
。もちろん、このパラメータを省略するとアプリケーションが機能しますが、起動時にスキーマを検証してアプリケーションに合っていることを確認することは、Hibernateがシノニムをサポートしていないことが残念です。 。 –
テーブルタイプがハードコードされているhibernates org.hibernate.tool.hbm2ddl.DatabaseMetadataクラスに問題があります private static final String [] TYPES = {"TABLE"、 "VIEW"};実際にはどこにあるべきですか プライベート静的final String [] TYPES = {"TABLE"、 "VIEW"、 "ALIAS"、 "SYNONYM"}; – user482745