使用H2的ClassCastException

时间:2013-05-06 09:29:35

标签: java jpa integration-testing h2

我正在使用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

2 个答案:

答案 0 :(得分:3)

假设q.getResultList()返回A个对象的列表,

B扩展A,因此B可以投放为A。然而事实恰恰相反。 A的实例无法转换为B

答案 1 :(得分:0)

最后问题是鉴别器值对H2的效果不好,我预计会有与hibernate和mysql相同的行为,但那是错误的。