读书人

hibernate 插入错误

发布时间: 2011-11-18 22:58:52 作者: rapoo

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

读书人网 >Java Web开发

热点推荐