import net.sf.hibernate.HibernateException;
import net.sf.hibernate.Session;
import com.fitech.dao.DBConn;
import com.fitech.form.NewOrgForm;
import com.fitech.hibernate.Organization;
import com.fitech.hibernate.TranslatorUtil;
public class StrutsSaveNewOrgDelegate {
/**
* @param newOrgForm
*/
public static void saveNewOrg(NewOrgForm newOrgForm) throws Exception
{
boolean result=false;
Organization org=new Organization();
org=TranslatorUtil.copyFormToPersistence(org,newOrgForm);
DBConn conn=null;
Session session=null;
try {
conn=new DBConn();
session=conn.beginTransaction();
session.update(org);
session.flush();
result=true;
} catch (HibernateException e) {
result=false;
e.printStackTrace();
}
finally
{
System.out.println("result is "+result);
if(conn!=null)
conn.endTransaction(result);
}
}
}
异常如下:
net.sf.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
at net.sf.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:63)
at net.sf.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:30)
at net.sf.hibernate.impl.BatcherImpl.convert(BatcherImpl.java:325)
at net.sf.hibernate.impl.BatcherImpl.executeBatch(BatcherImpl.java:134)
at net.sf.hibernate.impl.SessionImpl.executeAll(SessionImpl.java:2441)
at net.sf.hibernate.impl.SessionImpl.execute(SessionImpl.java:2392)
at net.sf.hibernate.impl.SessionImpl.flush(SessionImpl.java:2260)
at com.fitech.adapter.StrutsSaveNewOrgDelegate.saveNewOrg(StrutsSaveNewOrgDelegate.java:27)
at com.fitech.action.SaveSingleOrgAction.execute(SaveSingleOrgAction.java:54)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:226)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:415)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:971)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:402)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:28)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
at com.cbrc.smis.filter.AdminLoginFilter.doFilter(AdminLoginFilter.java:65)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
at com.cbrc.smis.filter.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:46)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6356)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:317)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3635)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2585)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
Caused by: com.ibm.db2.jcc.b.vd: Non-atomic batch failure. The batch was submitted, but at least one exception occurred on an individual member of the batch. Use getNextException() to retrieve the exceptions for specific batched elements.
at com.ibm.db2.jcc.b.i.a(i.java:390)
at com.ibm.db2.jcc.b.ad.b(ad.java:2863)
at com.ibm.db2.jcc.b.ad.a(ad.java:2632)
at com.ibm.db2.jcc.b.ad.executeBatch(ad.java:2444)
at com.ibm.db2.jcc.b.ad.executeBatch(ad.java:1329)
at weblogic.jdbc.wrapper.PreparedStatement_com_ibm_db2_jcc_b_ad.executeBatch(Unknown Source)
at net.sf.hibernate.impl.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:54)
at net.sf.hibernate.impl.BatcherImpl.executeBatch(BatcherImpl.java:127)
... 26 more
我测试过了,只要一执行完session.update(org);就抛异常
6 个解决方案
#1
一般是你的 NewOrgForm newOrgForm 有问题 看看数据对不对
#2
Could not execute JDBC batch update
看你的 .hbm.xml 文件中,有没有设置关联关系,
再看关联关系的 cascade 属性, 以及 hibernate.cfg.xml 中,jdbc.batch(可能写的不准
确) 这个属性的设置。
看你的 .hbm.xml 文件中,有没有设置关联关系,
再看关联关系的 cascade 属性, 以及 hibernate.cfg.xml 中,jdbc.batch(可能写的不准
确) 这个属性的设置。
#3
你的newOrgForm是new出来的吧,这个时候怎么会是update,应该是save()吧
#4
楼上说的也很对,
改成 saveorupdate
改成 saveorupdate
#5
问题解决了,是newOrgForm的问题
谢谢CAYU(中原),也谢谢其他高手
谢谢CAYU(中原),也谢谢其他高手
#6
恭喜
#1
一般是你的 NewOrgForm newOrgForm 有问题 看看数据对不对
#2
Could not execute JDBC batch update
看你的 .hbm.xml 文件中,有没有设置关联关系,
再看关联关系的 cascade 属性, 以及 hibernate.cfg.xml 中,jdbc.batch(可能写的不准
确) 这个属性的设置。
看你的 .hbm.xml 文件中,有没有设置关联关系,
再看关联关系的 cascade 属性, 以及 hibernate.cfg.xml 中,jdbc.batch(可能写的不准
确) 这个属性的设置。
#3
你的newOrgForm是new出来的吧,这个时候怎么会是update,应该是save()吧
#4
楼上说的也很对,
改成 saveorupdate
改成 saveorupdate
#5
问题解决了,是newOrgForm的问题
谢谢CAYU(中原),也谢谢其他高手
谢谢CAYU(中原),也谢谢其他高手
#6
恭喜