Java 正确的铸入式结果变压器

Java 正确的铸入式结果变压器,java,hibernate,jpa,hibernate-mapping,Java,Hibernate,Jpa,Hibernate Mapping,我使用Hibernate result transformer从数据库获取结果列表,如下所示: Query query = em.createNativeQuery("SELECT 1 as myTrueBoolean, 2 as myInt") query.unwrap(org.hibernate.Query.class).setResultTransformer‌​(Transformers.aliasT‌​oBean(myDataClass)); query.fetchResultList

我使用Hibernate result transformer从数据库获取结果列表,如下所示:

Query query = em.createNativeQuery("SELECT 1 as myTrueBoolean, 2 as myInt")
query.unwrap(org.hibernate.Query.class).setResultTransformer‌​(Transformers.aliasT‌​oBean(myDataClass));
query.fetchResultList()
然后我可以定义一个数据类,如下所示:

class MyDataClass {
    boolean myTrueBoolean;
    int myInt;
}
问题是,转换器将不会正确强制转换数据,因为它会将BigInteger指定为布尔值(
IllegalArgumentException在调用属性[MyDataClass.myTrueBoolean(预期类型=布尔)];target=MyDataClass,属性值=[0]]]
)将BigInteger指定为int也是一样的。这对于一般的Hibernate实体来说不是问题

编辑:


我不是在寻找它为什么不起作用的解释。我正在寻找一种让它工作的方法:-)我需要这个用于我的本地查询。是否有一种实现自己的transformer的方法可以实现这一点?

对于本机SQL查询,您可以得到数据库返回的任何结果。这就是本机SQL查询的要点。对于MySQL,它返回
biginger
,但是对于
MsSQL
它可以返回
Integer

把你的班级改成

class MyDataClass {
    Number myTrueBoolean;
    Number myInt;
}

另一个选择是使用JPA查询。它们将返回实体中的值类型

这显然是让它发挥作用的方法。但这不是我想要的,我想使用每个字段的正确类型。不幸的是,本机查询不可能做到这一点。