我想覆盖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:在映射重复列实体(正常,由于重复的吸气剂)

有处于休眠/ JPA一个@AttributeOverride但它似乎只与柱倍率和不是这种属性的运行。

我该怎么办呢?

感谢

有帮助吗?

解决方案

嗯......我发现一个尖来实现它......这不是很干净。但它运行:

这里是我的基类:

@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;
    }
}

您需要指定吸气剂@Transient因为如果不是,Hibernate会抛出一个重复定义公式字段。我的公式字段现在受到保护,而不是私人的。

现在,在每个子类的,则通过指定约束(以及如@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