0

マルチテナントアプリケーションがあり、実行時にスキーマ名を変更する必要があるため共有 DB 個別スキーマSaaS設計になります。

EntityManagerFactory の作成は非常にコストがかかるため、EntityManger の開始後にすべての DB 呼び出しの前に EMF アプリケーション スコープを作成し、スキーマを指定したいと考えています。私はPostgresql 8.1 を使用していますが、Postgesql は DB 接続の設定時にスキーマの選択をサポートしていないため、異なるスキーマのテーブルからクエリを実行する唯一の方法は、必要な DB を作成する前に「 SET search_path = "my.schema" 」をクエリすることだと思いました呼び出します。

私が試してみました;

StringBuilder sb = new StringBuilder();                
sb.append("SET search_path TO my.schema");            
entityManager_.createNativeQuery(sb.toString()).executeUpdate();

「 java.lang.IllegalStateException: You cannot call executeUpdate() on this query.」という例外が発生しました。クエリの種類が正しくありません'

PersistenceProvider としてeclipselinkを使用し、アプリケーション マネージャーとしてGlassfishを使用しています。

とにかく私はこれを成し遂げることができますか?

これを達成するためのより良い方法があれば、私はどんな提案にもオープンです

前もって感謝します

4

1 に答える 1