سؤال

أرغب في تجاوز قيود في صحة السبات. ها هو صفي الأساسي:

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

لدي فصل طفل حيث أريد تحديد أن المعادلة لحقل المعادلة هي المعادلة.

@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 المكررة)

يوجد 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;
    }
}

تحتاج إلى تحديد getter كـ transient لأنه إذا لم يكن الأمر كذلك ، فسيقوم Hibernate بإلقاء تعريف مكرر لحقل المعادلة. مجال المعادلة الخاص بي محمي الآن وليست خاصة.

والآن ، في كل من الفئة الفرعية الخاصة بك ، تقوم بتجاوز getaquation من خلال تحديد القيد (وبما أن transient لا يتم توريثه بواسطة الفئات الفرعية ، سيتم استخدام GetTivenation التجاوز لرسم خرائط حقل المعادلة).

هنا مثال من الفئة الفرعية:

@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