2017-02-15 6 views
2

JARからいくつかのクラス "A"を拡張するいくつかのクラス "B"を作成しました。クラス "B"の注釈を@Entity@Tableと入れてください(私はクラス "A"で同じことができません)が、Spring/Hibernateがテーブルを作成しているときはクラス "B"のフィールドだけが含まれています。データベース非エンティティスーパークラスのフィールドを含むJPAアノテーション

+--------+        +--------+--------+ 
| fieldB | but I want this to be made | fieldA | fieldB | 
+--------+        +--------+--------+ 

に作成され

// some class from JAR 
// not an Entity 
class A { 
    String fieldA; 
} 

@Entity 
@Table(name = "B") 
class B extends A { 
    String fieldB; 
} 

表はどのようにそれを管理するには?これを解決するクラスBに入れることができるJPAアノテーションがありますか?

EDIT@AttributeOverride注釈が@Id注釈がクラスの外に置くことができないときIdように、そのオーバーライドされたフィールドをマークする方法を、ソリューションですか?

答えて

0

ゲッターに@Idを設定できます。

@Entity 
@Table(name = "B") 
class B extends A { 
    String fieldB; 

    @Id 
    @Override 
    public String getFieldA() { 
     return super.getFieldA(); 
    } 
} 
+0

私はそれを試しましたが、その場合の問題は、私が実装機を実装する必要があるということです。私はスキップしたいものです。スーパークラスはビルダーを使っているので、セッターなしで作られています。 – milosdju

+0

それは本当です。ビルダーパターンとJPAは、最高の友達ではありません。 2つの他の "解決策"は、値をマッピングし、リフレクションを使ってBからセッターを構築しています(私は知っています...)。 – jklee