4

もっている:

@MappedSuperclass
class Superclass {

    @Id
    @Column(name = "id")
    protected long id;

    @Column(name="field")
    private long field;

}

@Entity
class Subclass extends Superclass {

}

@GeneratedValue で継承された ID に注釈を付け、サブクラス内で @Index を使用してフィールドに注釈を付ける方法は?

4

4 に答える 4

5

@GeneratedValue で継承された ID に注釈を付け、サブクラス内で @Index を使用してフィールドに注釈を付ける方法は?

私の知る限り、できません。できることは、AttributeOverrideおよびAssociationOverride注釈を使用して、属性と関連付けをオーバーライドすることです (つまり、列を変更するか、列を結合します)。しかし、あなたが求めていることを正確に行うことはできません。

の場合GeneratedValue、マッピングされたスーパークラスで戦略を宣言したくない場合は、XML マッピングを使用して戦略をオーバーライドすることを検討してください。

Index(ちなみにこれは標準の注釈ではありません)については、代わりにHibernateの注釈を使用してテーブルレベルで実際に宣言しようとしましたかTable(Hibernateを使用していると仮定しています)?

@Table(appliesTo="tableName", indexes = { @Index(name="index1", columnNames=
    {"column1", "column2"} ) } ) 

テーブル tableName の列に定義済みのインデックスを作成します。

参考文献

于 2010-09-30T18:44:53.117 に答える
0

代わりにアクセサメソッドにアノテーションを適用すると、これを実行できる場合があります。(私はこれを試したことがないので、それが機能することを保証することはできません。)

@MappedSuperclass
public class Superclass {

    @Id
    @Column(name = "id")
    public long getId() {
        return id;
    }

@Entity
public class Subclass extends Superclass {

    @GeneratedValue
    public long getId() {
        return super.getId();
    }
于 2010-10-02T17:33:10.073 に答える
0

他の誰かがこれを検索する場合に備えて、オーバーヘッドを追加する次のコードを使用しましたが、フィールド注釈の処理にはそれほど追加しないでください。

    private List<Field> getAllFields() {
    List<Field> fieldList = new ArrayList<Field>();

    // Add all fields from the current class
    fieldList.addAll(Arrays.asList(mElement.getClass().getDeclaredFields()));

    // Use an index to iterate over mElement's parent types
    Class clazz = mElement.getClass();

    // Get any fields from the parent class(es)
    while (clazz.getSuperclass() != null) {
        fieldList.addAll(Arrays.asList(clazz.getSuperclass().getDeclaredFields()));
        // Set it to that parent class
        clazz = clazz.getSuperclass();
    }

    return fieldList;
}

返されるリストには、すべての親クラスと子クラスのすべてのフィールドが含まれmElement、注釈を検索しているオブジェクトになります。お役に立てれば。

于 2014-09-08T08:53:04.833 に答える