我正在使用h2进行测试,但在转换为派生类时遇到问题。案例是:
@Entity
@DiscriminatorColumn(name = "DTYPE", discriminatorType = DiscriminatorType.STRING, length = 64)
public class A {...}
@Entity
@DiscriminatorColumn(name = "DTYPE", discriminatorType = DiscriminatorType.STRING, length = 64)
public class B extends A {...}
我的数据集如下:
<A attr1=... attr2=... DTYPE="A"/>
<B attr1=... attr2=... DTYPE="B"/>
问题是当我尝试在JPA中执行查询时,如下所示:
Query q = em.createQuery("SELECT a FROM A a WHERE...");
我尝试得到这样的值:
(B) q.getResultList().get(0);
我有以下例外:
java.lang.ClassCastException: mypackage.A cannot be cast to mypackage.B
在mysql中它工作正常,但不在H2中。 H2版本:1.3.171
答案 0 :(得分:3)
假设q.getResultList()
返回A
个对象的列表,
B
扩展A
,因此B
可以投放为A
。然而事实恰恰相反。 A
的实例无法转换为B
。
答案 1 :(得分:0)
最后问题是鉴别器值对H2的效果不好,我预计会有与hibernate和mysql相同的行为,但那是错误的。