1

別のプロジェクトから次のクラスをラップしています。Hibernate アノテーションを付けないでください。

public class Response
{
    private String access;

    ...

    public String getAccess()
    {
        return this.access;
    }

    public void setAccess(String access)
    {
        this.access = access;
    }

    ...
}

これは、現在のプロジェクトの「ラッパー クラス」(永続化用) です。ただし、スーパークラスのプロパティResponseはマップされていません。(例Access) (追加されたプロパティのみentry_idがマッピングされます。)

@Entity
@Table(name = "ruleEngineResponse")
public class RuleEngineResponse extends Response
{
    @Id
    @Column(name = "entry_id")
    private Long entry_id = -1L;

    public void setId(Long entry_id)
    {
        this.entry_id = entry_id;
    }

    public Long getId()
    {
        return this.entry_id;
    }

    // Problem: this property is not mapped
    @Column(name = "access")
    @Override
    public String getAccess()
    {
        return super.getAccess();
    }

    ...
}

Response スーパークラスに触れずにスーパークラスRuleEngineResponseからプロパティをマップするように構成するにはどうすればよいですか?Response

4

2 に答える 2

1

一部の注釈はフィールドに配置され、他の注釈は属性に配置されるため、機能しません。JPA 2.0仕様では、これは次の言葉で伝えられています。

アクセス タイプがこのようにデフォルト設定されているエンティティ階層内のすべてのクラスは、階層内で単一の一貫したデフォルト アクセス タイプが適用されるように、フィールドまたはプロパティの注釈の配置が一貫している必要があります。

Hibernate の場合は、アノテーションが field に配置されるため、 アクセス タイプは field になります。@Id結果として、 ingetAccessおよびその他の in メソッドのアノテーションも無視されます。

現在のクラス階層を保持し、RuleEngineResponse で再度変数を定義したくない場合はaccess、アノテーションをメソッドに配置する必要があります。

@Entity
@Table(name = "ruleEngineResponse")
public class RuleEngineResponse extends Response {

    private Long entry_id = -1L;

    @Id
    @Column(name = "entry_id")
    public Long getId() {
        return this.entry_id;
    }

    @Column(name = "access")
    @Override
    public String getAccess() {
        return super.getAccess();
    }
    ...
}

なんらかの理由でプロパティとフィールドへのアクセスを混在させたい場合は、@AccessTypeアノテーションを使用してそれを行うことができます。他の回答で提案されているようにMappedSuperClassの使用を検討することもできますが、注釈の配置の競合も解決する必要があります。

于 2012-08-13T10:11:36.790 に答える
1

この問題の典型的な解決策は、 で注釈を付けるResponseこと@MappedSuperclassです。それができない場合はorm.xml、次のように同じことを宣言できるはずです。

<mapped-superclass class = "Response" />

第 3 章 XML によるメタデータのオーバーライドを参照してください。

于 2012-08-13T09:13:54.613 に答える