1.修改后的代码:
public void addDirectorActorKeyword(long idStart, long idEnd) { SeriesMgr seriesMgr = new SeriesMgr(); String strCondition = ""; List<Comparable> paramlist = new ArrayList<Comparable>(); List<Series> seriesList = new ArrayList<Series>(); if(idStart != 0 && idEnd != 0){ //以下两种sql方式都可以...Series表中parentmmobjectid为NVARCHAR2类型,不能使用直接使用between and //strCondition = " to_number(parentmmobjectid) between ? and ? "; strCondition = " parentmmobjectid between to_number(?) and to_number(?) "; paramlist.add(idStart); paramlist.add(idEnd); seriesList = seriesMgr.find(strCondition, paramlist,"parentmmobjectid asc"); } ******** }
直接执行sql语句是可以正常查询到内容的,上面代码对应Hibernate翻译成的sql语句是 select * from series where parentmmobjectid between '11111' and '99999';可以正常的的查询到内容.
但是通过Hibernate进行查询,对应的如果是strCondition = " parentmmobjectid between ? and ? "; 就查询不到...
原因就是在设置表字段的时候parentmmobjectid设置成了NVARCHAR类型,Oracle中的隐式自动转换没有NARCHAR类型到Number类型的转换,需要借助to_number()函数.
select * from emp where hiredate = '17-11月-81'; 这个就是一个字符串转换成了日期.
隐式转换的前提:被转换对象是可以转换的
select * from emp where deptno = 10 和 select * from emp where deptno = '10'是一样的.
显示转换:
本文转自SummerChill博客园博客,原文链接:http://www.cnblogs.com/DreamDrive/p/7390231.html,如需转载请自行联系原作者