문제

Hibernate Validator의 제약 조건을 무시하고 싶습니다. 여기 내 기본 클래스가 있습니다.

@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.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을 가지고 있다는 예외를 던지기 : 엔티티의 매핑에서 반복 열 (중복 getter로 인한 정상)

Hibernate/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;
    }
}

최대 절전 모드는 방정식 필드에 대한 중복 정의를 던지기 때문에 getter를 @transient로 지정해야합니다. 내 방정식 필드는 이제 보호되지 않고 비공개가 아닙니다.

그리고 이제 각 서브 클래스에서 구속 조건을 지정하여 Getequation을 무시합니다 (및 하위 클래스에 의해 @Transient가 상속되지 않으므로 재정의 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