-1

我将 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

4

2 回答 2

4

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

B扩展A,因此,B可以转换为A. 然而,反过来是不正确的。的实例A不能转换为B

于 2013-05-06T09:57:38.677 回答
-1

最后的问题是,鉴别器值在 H2 上不能很好地工作,我希望与 hibernate 和 mysql 有相同的行为,但这是错误的。

于 2013-05-07T08:16:25.693 回答