2016-04-12 8 views
1

私はこの問題を解決できません。
誰でも私にそれを解決することができると教えてもらえますか?5つの永続クラスのための非控えめなスーパークラス3同じ場合もある永続フィールド?

5つの永続クラスが必要な5つのテーブルのデータベースがあります。

これらの3つの文字列フィールドはすべて5つ必要です。
フィールド1、フィールド2、フィールド3。

5つの永続クラスのそれぞれは、それらの異なる組み合わせを他の永続クラスと永続させます。ここに5つの永続クラスがあります:

Persistent   @Trasient 
1 field1, field2  field3 
2. all 3    none 
3. field2    field1, field3 
3. none    all 3 
4. field1, field3  field 2 
5. field 1   field2, field3 

私はスーパークラスのget/setメソッドが大好きです。

(それは同じであるそれらを受け入れる前に、それらをテストするために使用されるコードの多くがあります。)

が、それは可能ですか?

私は答えがNOだと思います。 しかし、私はチェックすると思った。

ありがとうございました。

+0

実生活の例は、あなたが解決しようとしていることを理解するのに役立つと思います。 –

+0

データのための継承はひどく聞こえます。ゲッターとセッターのボイラーメッキをしたくない場合は、[プロジェクトロンボク](https://projectlombok.org/)をご覧ください。 –

+0

具体例:私のデータベースには、さまざまな理由でID、pw、およびハッシュを格納する5つのテーブルがあります。 1つのテーブルに3つのフィールドがすべてあります。他のテーブルには1または2のフィールドがありますが、すべてではありません。しかし、他の理由から、3つのPOJOクラスをすべてエンティティとして使用して3つすべてを変数として持ちたいと思います。したがって、親は親が魅力的です。 – George

答えて

0

これは、アノテーションメタデータには適していないユースケースの1つと考えられます。

JPAでは、アノテーションをXMLメタデータでオーバーライド、補完、または置き換えることができます。あなたが説明したようなシナリオでは、永続的/一時的なフィールドをXMLメタデータで定義するのが最善であると思います。

詳細については、hibernate docsまたはこちらのStackOverflow questionをご確認ください。

+0

ありがとうございます。答えは私ができないように思われる。ですから、私がエンティティとして使うすべてのクラスに3つの変数のそれぞれのget/setを追加することは、XMLメタデータを迷惑にするよりも簡単です。 – George

+0

3つの変数とgetterとsetterを含む基本クラス(たとえば '@ Transient')を持つことができます。また、あなたのサブクラスでは、永続化したいもののゲッターを上書きし、単に実装で 'super.getField()'を呼び出すだけです。私はこれがあなたが望むものに近づけることができると思います。しかし、XMLを恐れる必要はありません。実際には、単一のJavaクラスを保持し、さまざまなオプションを使用して複数のクラスをマップすることができます。 –

+0

あなたの失望にさらに取り組むには、次のように考えてください。アノテーションは、自然にマップされる限り、コードにとどまるメタデータです。それらがそうでない場合(あなたがこの特定の場合のように)注釈を付けることができるようにコードを書かなければなりません。** ** OR ** *メタデータをコードの外に移動します。 私はいつも後者を選ぶでしょう。あなたのプロジェクトでJPAをもう使用しないことに決めるならば、注釈を入れる場所としてしか使われなかったナンセンスクラスの山ほどになってしまいます。価値がある。 –

関連する問題