`

hibernate原生sql封装,报错信息:could not find setter for rownum_

 
阅读更多
报错信息:could not find setter for rownum_

还原现场:在mysql环境下,以下代码,在mysql下运行正常,但是切换到oralce,报出找不到STUDENTNAME属性的错误。
List resultWithAliasedBean = s.createSQLQuery(
  "SELECT st.name as studentName, co.description as courseDescription " +
  "FROM Enrolment e " +
  "INNER JOIN Student st on e.studentId=st.studentId " +
  "INNER JOIN Course co on e.courseCode=co.courseCode")
  .setResultTransformer( Transformers.aliasToBean(StudentDTO.class))
  .list();


分析:原来是oracle自动将列映射的studentName转换为大写的STUDENTNAME,所以不能映射,报类找不到STUDENTNAME的set方法。
解决办法:添加addScalar方法,代码如下:

List resultWithAliasedBean = s.createSQLQuery(
  "SELECT st.name as studentName, co.description as courseDescription " +
  "FROM Enrolment e " +
  "INNER JOIN Student st on e.studentId=st.studentId " +
  "INNER JOIN Course co on e.courseCode=co.courseCode")
  .addScalar("studentName")
  .addScalar("courseDescription")
  .setResultTransformer( Transformers.aliasToBean(StudentDTO.class))
  .list();


Tip: the addScalar() calls were required on HSQLDB to make it match a property name since it returns column names in all uppercase (e.g. "STUDENTNAME"). This could also be solved with a custom transformer that search the property names instead of using exact match - maybe we should provide a fuzzyAliasToBean() method ;

还有一种方式解决,就是使用双引号将别名包裹起来,感觉不是很优雅。像这样
String sql = "select id as \"id\",iata as \"iata\",flight as \"flight\",dest as \"dest\",domint as \"domint\" " + 
            " ,sdt as \"sdt\",task_nature as \"taskNature\",est_date as \"estDate\",act_date as \"actDate\",remark as \"remark\" " + 
            " from FIDS_DEPF";



createSQLQuery  setFirstResult设置起始记录,setMaxResult设置结束记录 sql里有用分组函数,返回非持久化对象  当firstResult=0,正常,当firstResult>0时,报错。  大家是否遇到过?
public List findBySql(String sql, List params, int pageNo, int pageSize,
Class clazz) {
SQLQuery sqlQuery = getCurrentSession().createSQLQuery(sql);
if (params != null && !params.isEmpty()) {
for (int i = 0, size = params.size(); i < size; i++) {
sqlQuery.setParameter(i, params.get(i));
}
}
sqlQuery.setFirstResult((pageNo - 1) * pageSize);
sqlQuery.setMaxResults(pageSize);
sqlQuery.setResultTransformer(Transformers.aliasToBean(clazz));
return sqlQuery.list();
}

问题补充:报错信息:could not find setter for rownum_

用createSQLQuery的方式,查询的结果setResultTransformer()了一下。
并且设置了firstResult和MaxResult.

现象:
当firstResult为0的时候,一切正常,当firstResult不为0的时候报 “could not find setter for rownum_”的错误
如果不setResultTransformer,设置的firstResult和MaxResult不受影响。

主要是改sql
1、别名要大写
如:select day DAY,count(id) COUNT from t_name group by day
像楼下给的链接的解释,oracle自动将别名大写,但是如果自己设置了小写的,就会出现上面的问题。 为了避免addScalar多个,建议将别名直接大写。
2、当然你可以采用多个addScalar,这样只会,你就不能封装为通用的dao了。 

2
0
分享到:
评论

相关推荐

    Typesetter_php_源码.zip

    Typesetter_php_源码.zip

    reactivity.esm-bundler.js

    vue新建项目出现问题 替换这个文件

    Java_StructureBuilder_forC:半自动构造函数,以生成C语言的结构,以及它们的构造函数,getter和setter

    C的结构生成器[用Java编码]。 先进的改进和发展: FacuFalcone-CaidevOficial [Java]。 主意: 圣地亚哥·埃雷拉·布尔戈斯[C语言]。 private static String StartCourse(){ String message = " Keep Learning and...

    Typesetter_php_

    一个功能全面的网站内容管理系统,其嵌入式的管理接口可以让用户在一个简单的浏览器窗口中看到网站的改变。

    Gidot_Typesetter_3.0.6.rar

    软件名称:排版助手 GIDOT TYPESETTER 当前版本:3.0.6 作者:GIDOT 邮箱:GIDOT@VIP.QQ.COM 网站:WWW.GIDOT.CN/TYPESETTER 新增功能: ·批量排版功能 ·多文本文件合并成单一文本文件 功能改进: ·将排版工具...

    python中property和setter装饰器用法

    作用:调用方法改为调用对象, 比如 : p.set_name() 改为 p.set_name 区别:前者改变get方法,后者改变set方法 效果图: 代码: class Person: def __init__(self,name): self._name = name ...

    kortex:KINOVA:registered:KORTEX:trade_mark:机械臂的代码示例和API文档

    基本类型的getter / setter方法 集合上的迭代器,维和附加方法 许多助手(例如,序列化/反序列化,I / O功能) 使用Kortex API时,开发人员将需要了解Google协议缓冲区功能集,以最大限度地提高其效率。 C ++用户...

    vue-setter:通过getter和setter进行数据绑定的插件

    VueSetter 通过getter和setter进行数据绑定的插件安装npm install --save vue-setter用法输入绑定&lt;input type="text" v-setter.name="user" :value="user.getName()"&gt;将在输入时自动调用user.setName 。捆绑器...

    property-asserter:Java 属性 gettersetter 自动单元测试

    财产断言者这是一个 Java JUnit 测试实用程序,可以轻松测试属性的getter/setter方法。 该实现最初由 Scott Leberknight 编写,并在讨论过 我自己 Josef Betancourt 在时再次讨论了这个问题最近原始源代码存档不可用...

    setter-getterify:为对象生成 setter 和 getter

    setter-getterify 为对象生成 setter 和 getter 句法 setterGetterify ( object , properties , callbacks ) ; 例子 var setterGetterify = require ( 'setter-getterify' ) ; var thing = { some : 'properties'...

    memcache-simplified:内存缓存 gettersetter

    一个简单的 memcached 实现,支持 getter/setter 先决条件 安装 gcc! 在 MacOS 下开发并经过良好测试。 它在 Windows 上不起作用。 尚未在其他 linux 系列系统上测试。 运行服务器 确保您有 11211 端口可用于应用...

    GIDOT TYPESETTER 3.0.8

    软件名称:排版助手 GIDOT TYPESETTER 当前版本:3.0.8 (2009-12-08 02:05:07) 作者:GIDOT 邮箱:GIDOT@VIP.QQ.COM 网站:WWW.GIDOT.NET/TYPESETTER 官方QQ群:56288291、13733967 新增功能: ·关闭时保存编辑现场...

    gettersAndSetters:使用Getter和Setter的简单方法-Java

    gettersAndSetters 使用Getter和Setter的简单方法-Java 这些项目是展示使用getter和setter的简单方法

    unigui0.83.5.820

    - 0000688: Bug in installer Environment setter - 0000687: "Script" property for TUniForm for adding Custom JS - 0000665: Compatibility with multiple IP systems - 0000685: UniDBGrid: Ellipsis in first...

    LuaBind 源码 (Lua增强库)

    1 介绍 LuaBind 是一个帮助你绑定C++和Lua的库.她有能力暴露 C++ 函数和类到 Lua . 她也有 能力支持函数式的定义一个Lua类,而且使之继承自C++或者Lua....继承来的虚函数.... 她利用模板原编程技术实现....

    hibernate简介及优缺点

    1.Hibernate持久化类:Hibernate的持久化类是一个JavaBean(pojo+相应属性的getter和setter方法),该JavaBean最好实现java.io.Serializable接口 2.Hibernate映射文件:Hibernate映射文件是Hibernate与数据库进行持久化...

    Gidot_Typesetter. 一个文件排版工具

    Gidot_Typesetter. 一个文件排版工具

    软件名称:排版助手 GIDOT TYPESETTER

    ·文字统计信息对话框增加复制按钮 (此项由网友爱无界提出) ·统计信息里增加全角统计 (此项由网友爱无界提出) BUG修正: ·去掉HTML代码个别情况下会出现文本重复现象 (此项由网友耶利米提出) ·修正引号功能对...

    ffloat:FFloat尽管简单易用,但可以满足您对浮动层的所有想像

    飘浮 FFloat尽管简单易用,但可以满足您对...如果仅更新内容区域,则继续使用setter (() {}) 颜色 颜色 错误的 Color(0x7F000000) [FFloat]颜色 坡度 坡度 错误的 空值 坡度。会覆盖颜色 锚 小部件 错误的 空值 锚元

    程序员考试刷题-OCA_Java_SE_8_1Z0-808:OCA_Java_SE_8_1Z0-808

    程序员考试刷题OCA Java SE 8 程序员 I 认证 - 1Z0-808 假设如下: ...语句,并且问题没有明确提到...描述性注释:采用描述性注释,例如“setter 和 getter go here”,从表面上看。 假设存在正确的代码,编译并成功运行以

Global site tag (gtag.js) - Google Analytics