JPA: Наследование - значение дискриминатора не учитывается в сгенерированном SQL - PullRequest
5 голосов
/ 12 апреля 2010

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

@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 из объекта 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, я не нашел никаких следов "criminator = "в предложении where. Что я делаю не так?

Я использую базу данных PostGreSQL и Hibernate в качестве поставщика JPA.

1 Ответ

12 голосов
/ 13 апреля 2010

Я не знаю, является ли это ошибкой или функцией (для меня это ошибка), но решение (обходной путь?) Состоит в том, чтобы использовать аннотацию 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 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...