Jul*_*ien 5 java sql inheritance hibernate jpa
我尝试使用这个映射:
@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;
}
Run Code Online (Sandbox Code Playgroud)
当我尝试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)
Run Code Online (Sandbox Code Playgroud)
看看生成的sql,我在where子句中找不到"discriminator ="的痕迹.我究竟做错了什么 ?
我使用PostGreSQL数据库和Hibernate作为JPA提供程序.
Pas*_*ent 12
我不知道这是一个错误还是一个功能(对我而言,这是一个错误),但解决方案(解决方法?)是@ForceDiscriminator在顶级类上使用Hibernate注释:
@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 {
...
}
Run Code Online (Sandbox Code Playgroud)
您可能想投票支持HHH-4358.