JPA: Наследование - значение Различителя, не принятое во внимание в сгенерированном SQL

Я пытаюсь использовать это отображение:

@Entity
@Table(name="ecc.\"RATE\"")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="DISCRIMINATOR", discriminatorType= DiscriminatorType.STRING)
public abstract class Rate extends GenericBusinessObject {
...
}

@Entity
@DiscriminatorValue("E")
public class EntranceRate extends Rate { 
 @ManyToOne
 @JoinColumn(name = "\"RATES_GRID_ID\"")
 protected RatesGrid ratesGrid;
...
}


@Entity
@Table(name="ecc.\"RATES_GRID\"")
public class RatesGrid extends GenericBusinessObject {
 /** */
 @OneToMany(mappedBy = "ratesGrid",  targetEntity = EntranceRate.class, fetch=FetchType.LAZY)
 private List<EntranceRate> entranceRates;
}

Когда я пытаюсь получить доступ к моему entranceRates список от a ratesGrid объект, я получаю эту ошибку:

Object with id: 151 was not of the specified subclass: com.ecc.bo.rate.EntranceRate (loaded object was of wrong class class com.ecc.bo.rate.AnnualRate)

Смотря на сгенерированный sql, я не нашел трассировки "различителя =" в где пункт. Что я делаю неправильно?

Я использую базу данных PostGreSQL и Быть в спящем режиме как поставщик JPA.

5
задан Pascal Thivent 14 April 2010 в 00:30
поделиться

1 ответ

Я не знаю, ошибка это или функция (для меня это ошибка), но решение (обходной путь?) - использовать аннотация Hibernate @ForceDiscriminator в вашем высшем классе:

@Entity
@Table(name="ecc.\"RATE\"")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="DISCRIMINATOR", discriminatorType= DiscriminatorType.STRING)
@org.hibernate.annotations.ForceDiscriminator
public abstract class Rate extends GenericBusinessObject {
    ...
}

Возможно, вы захотите проголосовать за HHH-4358 .

12
ответ дан 13 December 2019 в 05:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: