2

「フレックス フィールド」とは、顧客サイトのテーブルを変更してテーブルに追加の列を追加し、そのテーブルのエンティティに関するカスタム情報を保持するための用語です。jpa、特に eclipselink でこのメカニズムをサポートしている人がいるかどうか疑問に思っていました。

これらの顧客が指定したフィールドの値に基づいてベース行をフィルター処理できるため、これを行う必要があります。関連テーブルにこれらのフィールドがあると、この補助テーブルへの複数のエイリアス結合が発生します。

明らかなアプローチ (少なくとも私にはそう思われる) は、新しいフィールドをエンティティ オブジェクトに注入するアスペクトを定義してから、動的なウィービングを実行することです。

誰かがこれを行ったのか、私が見ていない問題や他のアプローチに関する提案があるかどうか疑問に思っていました.

4

2 に答える 2

2

では、エンティティに新しいフィールドを挿入する場合、アプリケーションでこれらをどのように使用しますか?アプリケーション/UIのコードも変更しますか?

最も簡単な解決策は、通常、エンティティにプロパティのマップを設定することです。これにより、実行時に新しいプロパティを追加でき、アプリケーション/ UIがこれらのプロパティにアクセスしてクエリを実行できるため、これらのプロパティを表示して編集および表示できます。ElementCollectionまたはOneToManyを使用して、プロパティをプロパティテーブルにマップできます。

より複雑な既存のテーブルを変更したい場合は、orm.xmlを編集してアプリケーションを再デプロイするか、SessionCustomizerまたはDescriptorCustomizerにマッピングを追加することにより、JPAマッピングも更新する必要があります。EclipseLinkは、フィールドまたはget/setメソッドの代わりに列をプロパティにマッピングできるVIRTUALAccessModeもサポートしています。

より力ずくの方法は、オブジェクトモデルコードとアプリケーションコードを更新して、新しいデータを利用することです。

EclipseLinkは、クラスを必要とせずに動的エンティティをテーブルにマップするためのより動的なソリューションも提供します。

http://wiki.eclipse.org/EclipseLink/Examples/JPA/Dynamicを参照して ください。

于 2011-03-02T14:28:20.823 に答える