我正在使用Hibernate结果转换器从数据库中获取结果列表,如下所示:
Query query = em.createNativeQuery("SELECT 1 as myTrueBoolean, 2 as myInt")
query.unwrap(org.hibernate.Query.class).setResultTransformer(Transformers.aliasToBean(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实体来说不是问题。
编辑:
我不是在寻找解释为什么它不起作用。我正在寻找一种让它工作的方法:-)我需要这个用于我的原生查询。是否有可能实现自己的变压器来实现这一目标?
答案 0 :(得分:0)
对于本机SQL查询,您可以获得数据库返回的任何内容。这与本机SQL查询有点关系。对于MySQL,它返回BigInteger
,但对于MsSQL
,它可以返回Integer
。
将班级更改为
class MyDataClass {
Number myTrueBoolean;
Number myInt;
}
另一种选择是使用JPA查询。它们将从您的实体返回值类型。