一个Hibernate验证注释的覆盖?
-
20-09-2019 - |
题
我想覆盖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;
}
}
我还没有找到更好的......
不隶属于 StackOverflow