0

eclipselink で動的マッピングを検索しましたが、私の場合の解決策が見つかりません。現在、私のシステムでは、エンティティに 3 つのバージョンがあり、1 つは作業中/ドラフト (つまり W100)、もう 1 つは実稼働 (つまり M100) であり、残りは1 つは履歴バージョン (H100) で、いつでも作業バージョン、実稼働バージョン、および履歴バージョンの両方にアクセスできます。すなわち

Account account = // query from working.
account.setStatus("APPROVED");
account.increaseVersionNo();
myJPAEngine.updateApproved(account); // this step update status to both working and production
//, and W100.PRODUCTION_IPKEY = M100.IPKEY 
// (if production version does't exist
//, create a new one with same columns as working version).
//, if increaseVersionNo() called, then we need copy old 'M'- production record to 'H' history version table.
//, my JPA engine need access both 'W'/'M'/'H' tables at same time by passing a parameter to JPA API metadata classes by ThreadLocal or other related workaround.

eclipselink (または Hibernate) はこれをサポートしていますか? 私の動的マッピングは、使用するテーブルを決定するパラメーターを受け入れます。つまり、これはインタラクティブな動的マッピングです。いくつかのカスタマイズを eclipselink メタデータ クラスにプラグインする方法と方法は?

ありがとう。

4

2 に答える 2

0

SQL テーブル名は、xml 構成/注釈を使用してエンティティ クラスにマップされるため、実行時に変更できるとは思えません

私が考えることができる唯一の方法は、エンティティマネージャーのネイティブクエリを使用することです。

String sql = "select xyz from " + tableName;
List<MyEntity> reuslt = em.createNativeQuery(sql, MyEntity.class).getResultList();
于 2013-08-07T05:25:27.663 に答える