EntityManager em;
Query query = em.createQuery(sql);
在这里,如果sql内容是下面这样的
select fieldA,fieldB from testTable where fieldC ='xxx' order by fieldA那能够正确执行,没什么问题,但是如果sql是下面这样的select fieldA,fieldB from testTable where fieldC ='xxx' order by to_number(fieldA)那么执行就失败了,抛出openjpa-0.0.0-rnull nonfatal user error> org.apache.openjpa.persistence.ArgumentException: Encountered 异常。
这是为什么呢?对于出错的sql内容,拿到SQL Developer中执行是没有问题的。哪位高人给解释一下呢。

解决方案 »

  1.   

    排序时,可能是fieldA的类型有问题
      

  2.   

    fieldA类型是VARCHAR2对于VARCHAR2没有null的值,定义字段时定义为not null了。而且,在sql developer中执行是没有问题的。另外说一句,我的sql是在java段String拼出来的,里面有回车什么的,这个没问题的吧
      

  3.   

    应该是在java的情况下存在转换问题吧!
      

  4.   


    你是说在java生成字符串的时候存在转义的问题?我是在控制台输出拼好的SQL,然后copy出来在sql developer里执行,没有问题的。你说的转换问题具体指什么?
      

  5.   

    一会说不上来,要不
    你换换代码把Query query = em.createQuery(sql);
    换成Query query = em.createSqlQuery(sql);
    试一试,上面那个支持hql的,下面支持原生的sql语句试一试!