<insert   id="User.insert"   parameterClass="User"> 
<selectKey   resultClass="long"   keyProperty="id"   > 
        select   SQ_USER.nextval   as   id   from   dual 
</selectKey> 
resultClass="long" 试试改成 java.lang.String
用String接收后在转换成long型

解决方案 »

  1.   

    java.lang.ClassCastException:   java.lang.Long, 后面的信息发上来用Long试试 或者干脆使用abator根据数据库生成java和配置文件
      

  2.   

    <selectKey   resultClass="int"   keyProperty="id"   > 
            select   SQ_USER.nextval   as   id   from   dual 
    </selectKey> 标准应该是int吧!
      

  3.   

    insert   into   USER   (ID,   USERNAME,   PASSWORD) values   (#id#,   #username#,   #password#) id 的类型是数据类型而不是对象,#id# 作为对象查入数据库!修改id 的类型为 Long. 
      

  4.   

    谢谢以上的解答,不过这些方法全都试过问题依然存在,现在只能把sequences写在语句里面不报错,但是这样又得不到PK值.代码如下:
    <insert id="User.insert" parameterClass="User"> 
    insert   into   USER   (ID,   USERNAME,   PASSWORD) 
            values   (SQ_USER.nextval,   #username#,   #password#) 
    </insert> 
      

  5.   

    估计是SQ_USER.nextval转成long时出错了
      

  6.   

    可以用这样:
    <selectKey resultClass="java.lang.Integer" keyProperty="id">
    <![CDATA[
    select SQ_USER.NEXTVAL as ID from dual
    ]]>
    </selectKey>
      

  7.   

    按有几个群,你不妨加进去,可以和大家一起讨论啊.........46986340,28039577,4804620                                                                                                                                                                                                                                                                                       
    在那里看看有无能回答你的,谢谢,LZ,甭忘了给俺分哦,谢谢LZ
      

  8.   

    <selectKey   resultClass="java.lang.Integer"   keyProperty="id"> 
    <![CDATA[ 
    select   SQ_USER.NEXTVAL   as   ID   from   dual 
    ]]> 
    </selectKey> 
      

  9.   

    insert       into       USER       (ID,       USERNAME,       PASSWORD)   
                    values       (SQ_USER.nextval,       #username#,       #password#)   IBATIS insrt好像方法会返回一个值,这个值就是id,我记得是这样的。楼主可以试试看
      

  10.   

    buffon001,谢谢你的解答不过,我前面已经说过我现在就用的这种方式,它是可以正确插入但是在插入后是不会返回ID值
      

  11.   

    <insert   id="User.insert"   parameterClass="User"> 
    这里你没有指定resultClass,也就没有返回值,下边这个方法里类型转换就出错了.
    public   User   insert(User   user)   { 
    return   (User)getSqlMapClientTemplate().insert("User.insert",   user); 
    } update ,insert ,delete一般都返回影响的数据条数吧.
      

  12.   

    试试
    select to_number(SQ_USER.nextval) id from dual
      

  13.   

    shan1119,谢谢你的回答,不过insert是有返回值的,它可以返回这个对象的主键的,不过现在不是这块出错,而是插入时生成主键ID那里报错。
      

  14.   

    zjjsgwm,谢谢你的回答不过我刚才按你的方式试过了还是一样报那个错误的。
      

  15.   

    <insert   id="User.insert"   parameterClass="User"> 
        <selectKey   resultClass="long"   keyProperty="id"   > 
            select   SQ_USER.nextval   as   id   from   dual 
        </selectKey> 
       insert   into   USER   (ID,   USERNAME,   PASSWORD) 
            values   (#id:DECIMAL#,   #username#,   #password#) 
    </insert> 
    或者把:DECIMAL 换成 :Integer试试
      

  16.   

    貌似插入时数字类型有时候不加 :Integer 或者不加 :DECIMAL 是会报错的 先试下吧
      

  17.   

    楼主解决没?
    我跟楼主一样的问题啊
    <!-- 添加对象 -->
    <insert id="addTRole" parameterClass="trole">
    <selectKey resultClass="long" keyProperty="id" type="pre">
    select trolePKSequence.nextVal from dual
    </selectKey>
    insert into  t_role(id,name,addDate,valid,memo) 
    values(#id#,#name#,#addDate#,#valid#,#memo#)
    </insert>
    id老得不到啊?
    郁闷!
      

  18.   

    return (User)getSqlMapClientTemplate().insert("User.insert", user); 
    insert返回的是一个Long类型的,你强制转换为User类型,肯定会报java.lang.ClassCastException错误啦。
      

  19.   

    不同的数据库,selectKey标签的用法是不同的
      

  20.   

    UserDAOImpl.java如下:
    public class UserDAOImpl extends SqlMapClientDaoSupport implements
    UserDAO {
    public User insert(User user) {
    return (User)getSqlMapClientTemplate().insert("User.insert", user);
    }
    }
    修改为
    public class UserDAOImpl extends SqlMapClientDaoSupport implements
    UserDAO {
    public User insert(User user) {
    getSqlMapClientTemplate().insert("User.insert", user);
    return user;
    }
    }
      

  21.   

     <selectKey resultClass="java.lang.Long" keyProperty="id">
         select SEQ_USER.nextval from dual
         </selectKey>似乎和我的已疑惑差不多,看一下
      

  22.   

    jove420,,写的是可以用的,我试了。