【问题标题】:Override of an hibernate validator annotation?覆盖休眠验证器注释?
【发布时间】:2010-02-16 17:06:22
【问题描述】:

我想覆盖休眠验证器中的约束。这是我的基类:

@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: Repeated column in mapping for entity(正常,由于重复的 getter)

在 Hibernate/jpa 中有一个 @AttributeOverride 但它似乎只使用列覆盖而不是这种属性运行。

我该怎么做?

谢谢

【问题讨论】:

    标签: hibernate annotations overriding hibernate-validator


    【解决方案1】:

    嗯...我找到了实现它的提示...这不是很干净...但它运行:

    这是我的基类:

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

    您需要将 getter 指定为 @Transient,因为如果不是,Hibernate 将为方程式字段抛出重复的定义。我的方程式字段现在受到保护而不是私有。

    现在,在您的每个子类上,您通过指定约束来覆盖 getEquation(并且由于子类不继承 @Transient,覆盖的 getEquation 将用于方程式字段映射)。

    这是一个子类示例:

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

    我还没有找到更好的...

    【讨论】:

      猜你喜欢
      • 2017-09-06
      • 1970-01-01
      • 2017-02-13
      • 1970-01-01
      • 2011-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多