首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

hibernate 插入错误

2011-11-18 
hibernate 插入异常我在使用hibernate插入数据的时候出现异常错误java.lang.Long而实际上数据却已经插入到

hibernate 插入异常
我在使用hibernate插入数据的时候出现异常错误   java.lang.Long
而实际上数据却已经插入到数据库中

系统采用SSH框架   下面是类的映射文件

<?xml   version= "1.0 "   encoding= "utf-8 "?>
<!DOCTYPE   hibernate-mapping   PUBLIC   "-//Hibernate/Hibernate   Mapping   DTD   3.0//EN "
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd ">
<!--
        Mapping   file   autogenerated   by   MyEclipse   -   Hibernate   Tools
-->
<hibernate-mapping>
        <class   name= "com.ffcs.lsoc.bo.KnowledgeInfo "   table= "KNOWLEDGE_INFO "   schema= "FFCSNSS ">
                <id   name= "knowledgeid "   type= "java.lang.Long ">
                        <column   name= "KNOWLEDGEID "   precision= "22 "   scale= "0 "   />
                          <generator   class= "sequence "   >
                        <param   name= "sequence "> SEQ_KNOWLEDGE_INFO </param>
                        </generator>
                </id>
                <property   name= "nodeid "   type= "java.lang.Long ">
                        <column   name= "NODEID "   precision= "22 "   scale= "0 "   />
                </property>
                <property   name= "title "   type= "java.lang.String ">
                        <column   name= "TITLE "   length= "300 "   />
                </property>
                <property   name= "range "   type= "java.lang.String ">
                        <column   name= "RANGE "   length= "100 "   />
                </property>
                <property   name= "keyword "   type= "java.lang.String ">
                        <column   name= "KEYWORD "   length= "200 "   />
                </property>
                <property   name= "keyword1 "   type= "java.lang.String ">
                        <column   name= "KEYWORD1 "   length= "200 "   />
                </property>


                <property   name= "keyword2 "   type= "java.lang.String ">
                        <column   name= "KEYWORD2 "   length= "200 "   />
                </property>
                <property   name= "child "   type= "java.lang.String ">
                        <column   name= "CHILD "   length= "100 "   />
                </property>
                <property   name= "brief "   type= "java.lang.String ">
                        <column   name= "BRIEF "   length= "2048 "   />
                </property>
                <property   name= "content "   type= "com.ffcs.lsoc.bo.type.StringClobType ">
                        <column   name= "CONTENT "   />
                </property>
        </class>
</hibernate-mapping>

其中字段content在数据库中是clob类型

类com.ffcs.lsoc.bo.type.StringClobType用来解决
clob类型操作问题

package   com.ffcs.lsoc.bo.type;

import   java.io.IOException;
import   java.io.Reader;
import   java.io.Serializable;
import   java.io.StringReader;
import   java.sql.PreparedStatement;
import   java.sql.ResultSet;
import   java.sql.SQLException;
import   java.sql.Types;

import   org.hibernate.HibernateException;
import   org.hibernate.usertype.UserType;

public   class   StringClobType   implements   UserType   {

        public   Object   assemble(Serializable   arg0,   Object   arg1)
                        throws   HibernateException   {
                //   TODO   Auto-generated   method   stub
                return   null;
        }

        public   Object   deepCopy(Object   value)   throws   HibernateException   {
        if   (value   ==   null)   return   null;
        return   new   String((String)   value);
        }

        public   Serializable   disassemble(Object   arg0)   throws   HibernateException   {
                //   TODO   Auto-generated   method   stub
                return   null;
        }

        public   boolean   equals(Object   x,   Object   y)   throws   HibernateException   {


                return   (   x   ==   y)
                                  ||   (         x   !=   null
                                            &&   y   !=   null
                                            &&   (x.equals(y)));
        }

        public   int   hashCode(Object   arg0)   throws   HibernateException   {
                //   TODO   Auto-generated   method   stub
                return   0;
        }

        public   boolean   isMutable()   {
                return   false;
        }

        public   Object   nullSafeGet(ResultSet   rs,   String[]   names,   Object   owner)
                        throws   HibernateException,   SQLException   {
        String   result   =   null;
        Reader   reader   =   rs.getCharacterStream(names[0]);
        if   (reader   !=   null)   {
        StringBuffer   sb   =   new   StringBuffer();
        try   {
        char[]   charbuf   =   new   char[4096];
        for   (int   i   =   reader.read(charbuf);   i   >   0;   i=   reader.read(charbuf))   {
        sb.append(charbuf,   0,   i);
        }
        result   =   sb.toString();
        }catch   (IOException   ioe)   {

        }
        }

        return   result;
        }

        public   void   nullSafeSet(PreparedStatement   st,   Object   value,   int   index)
                        throws   HibernateException,   SQLException   {
        if(value   !=   null)   {
        StringReader   r   =   new   StringReader((String)value);
        st.setCharacterStream(index,   r,   ((String)value).length()   );
        }else   {
        st.setNull(index,   sqlTypes()[0]);
        }
        }

        public   Object   replace(Object   arg0,   Object   arg1,   Object   arg2)
                        throws   HibernateException   {


                //   TODO   Auto-generated   method   stub
                return   null;
        }

        public   Class   returnedClass()   {
                return   String.class;
        }

        public   int[]   sqlTypes()   {
                return   new   int[]   {   Types.CLOB   };
        }

}



[解决办法]
异常信息如下,另外在执行update操作的时候没有出现任何问题
javax.servlet.ServletException: java.lang.Long
org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:545)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:486)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
com.ffcs.lsoc.util.EncodingProcess.process(EncodingProcess.java:14)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


root cause

java.lang.ClassCastException: java.lang.Long
com.ffcs.lsoc.bo.dao.impl.KnowledgeInfoDaoImpl.add(KnowledgeInfoDaoImpl.java:348)
com.ffcs.lsoc.service.KnowledgeInfoService.add(KnowledgeInfoService.java:52)
com.ffcs.lsoc.struts.action.NewEditKnowledgeAction.dialog(NewEditKnowledgeAction.java:91)
com.ffcs.lsoc.struts.action.BaseAction.execute(BaseAction.java:77)
org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:106)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
com.ffcs.lsoc.util.EncodingProcess.process(EncodingProcess.java:14)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


[解决办法]
你的相应属性是否声明的是 long
[解决办法]
把映射文件中的type= "java.lang.Long "属性都去掉,hibernate会自动寻找

[解决办法]
UP LS

热点排行