質問

私は、Hibernateバリデータに制約を無効にしたいと思います。ここに私の基本クラスがあります:

@Entity
@Table(name = "Value")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "valueType", discriminatorType = DiscriminatorType.STRING)
public abstract class Value extends CommonTable
{
    private String              equation;

    @SimpleEquation(equationType = EquationType.EQUATION)
    public String getEquation()
    {
        return equation;
    }

    public void setEquation(String equation)
    {
        this.equation = equation;
    }
}

私は数式フィールドのequationTypeはEquationType.ANOTHER_EQUATION、このようなものであることを指定したい子クラスを持ってます:

@Entity(name = "CharacteristicUpgradeValue")
@DiscriminatorValue("CharacteristicUpgradeValue")
public class CharacteristicUpgradeValue extends Value
{    
    @Override
    @SimpleEquation(equationType = EquationType.COST_VALUE)
    public String getEquation()
    {
        return super.getEquation();
    }

}

(による重複ゲッターに、通常の)エンティティのマッピングで繰り返さ列:

このコードは、私がorg.hibernate.MappingExceptionを持っているという例外をスロー

があり@AttributeOverrideは、Hibernate / JPAであるが、列のオーバーライドと属性のないこの種のみ実行するようです。

どのように私はそれを行うことができますか?

感謝

役に立ちましたか?

解決

うーん...私はそれは非常にきれいではありません...それを達成するためのヒントを見つけた...しかし、それが実行されます:

ここに私の基本クラスがあります:

@Entity
@Table(name = "Value")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "valueType", discriminatorType = DiscriminatorType.STRING)
public abstract class Value extends CommonTable
{
    protected String                equation;

    @Transient
    public abstract String getEquation();

    public void setEquation(String equation)
    {
        this.equation = equation;
    }
}

あなたはされていない場合、Hibernateは数式フィールドの重複定義がスローされますので、@Transientとしてゲッターを指定する必要があります。私の数式フィールドは、現在、民間保護されていません。

そして今、あなたのサブクラスのそれぞれについて、あなたは制約を指定(して@Transientはサブクラスに継承されていないとして、オーバーライドgetEquationは、式のフィールドマッピングのために使用されます)によってgetEquationを上書きします。

ここでサブクラスの例です。

@Entity(name = "CharacteristicUpgradeValue")
@DiscriminatorValue("CharacteristicUpgradeValue")
public class CharacteristicUpgradeValue extends Value
{    
    @Override
    @SimpleEquation(equationType = EquationType.COST_VALUE)
    public String getEquation()
    {
        return equation;
    }

}

私は良く発見していない...

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top