在ResultTransformer中更正

时间:2017-06-16 09:34:26

标签: java hibernate jpa hibernate-mapping

我正在使用Hibernate结果转换器从数据库中获取结果列表,如下所示:

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指定为boolean(IllegalArgumentException occurred while calling setter for property [MyDataClass.myTrueBoolean (expected type = boolean)]; target = MyDataClass, property value = [0]]),并将BigInteger指定为int。这对于一般的Hibernate实体来说不是问题。

编辑:

我不是在寻找解释为什么它不起作用。我正在寻找一种让它工作的方法:-)我需要这个用于我的原生查询。是否有可能实现自己的变压器来实现这一目标?

1 个答案:

答案 0 :(得分:0)

对于本机SQL查询,您可以获得数据库返回的任何内容。这与本机SQL查询有点关系。对于MySQL,它返回BigInteger,但对于MsSQL,它可以返回Integer

将班级更改为

class MyDataClass {
    Number myTrueBoolean;
    Number myInt;
}

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