Hibernate:org.hibernate.WrongClassException,SINGLE_TABLE继承和DiscriminatorFormula
|
我将Hibernate 3.2.2 GA与HSQLDB 2.0 GA结合使用,并且具有类似于以下内容的类层次结构:
@Entity
@Table(name = \"A_TABLE\")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorFormula(value = \"case when CODE IN (1, 2, 3, 4) then \'TypeB\'
when CODE IN (5, 6, 7, 8) then \'TypeC\' else NULL end\")
@org.hibernate.annotations.Entity(dynamicUpdate = true, dynamicInsert = true)
public abstract class A{
(...)
}
@Entity
@DiscriminatorValue(\"TypeB\")
public class B extends A {
(...)
}
@Entity
@DiscriminatorValue(\"TypeC\")
public class C extends A {
(...)
}
我正在尝试执行以下HQL查询,该查询将同时返回B类和C类的对象。
String hql = \"from A a where a.someAttr = 3\";
Query query = session.createQuery(hql);
return query.list();
但是,出现以下错误:
org.hibernate.WrongClassException: Object with id: 2 was not of the specified subclass: A (Discriminator: C )
最奇怪的是ID为2的对象是一个C实例...
我已经搜寻了这个错误,但发现有人遇到了这个错误,但是没有人使用InheritanceType.SINGLE_TABLE
和DiscrimatorFormula
。有没有人遇到这个问题?
没有找到相关结果
已邀请:
4 个回复
替秀宝
赐黄
)添加一个
批注,它可能会正常工作。 该解决方案是特定于Hibernate的。我不确定该问题是否普遍存在于JPA或是否有JPA解决方案。 编辑: 这似乎还没有解决问题。 尝试获取hibernate为您生成的sql可能是值得的。 加
到您的休眠配置,看看会发生什么。 使用force子句和不使用force子句获取此sql可能会提供线索,以确切说明force的作用以及为何不起作用。 目前我什么也没想,除了判别式中的ѭ8看起来有点冒险。
貉骂
爆山