找回密码
 注册成为天翎用户
查看: 1139|回复: 1

视图保存错误,报could not execute JDBC batch update

[复制链接]
linner 发表于 2012-9-26 10:45:42 | 显示全部楼层 |阅读模式
本帖最后由 bess 于 2012-9-27 16:29 编辑

视图使用的是sql代码模式,保存报错:org.hibernate.exeption.Generic.JDBCException:Could not execute JDBC batch update
我的sql代码是这样写的:
var sql = "";
var sw = "";
var andStr = "";
sql = "select  * from tlk_FM_TSJB where  (statelabel = '部门处理' or statelabel = '无法执行'  or statelabel = '执行完毕') ";
var type = getItemValueAsString("type");
var search_title = getItemValueAsString("search_title");
var search_start_time = getItemValueAsString("search_start_time");
var search_end_time = getItemValueAsString("search_end_time");
var user = getWebUser();
var roleList = user.getRolelist();
if(null!=search_title&&search_title.trim().length()>0)
{
   andStr +=" item_title like '%"+search_title+"%' and ";
}
if(null!=search_start_time&&search_start_time.trim().length()>0)
{
     andStr +=" CREATED>=to_date('"+search_start_time+"','yyyy-mm-dd')  and ";
}
if(null!=search_end_time&&search_end_time.trim().length()>0)
{
     andStr +=" CREATED<=to_date('"+search_end_time+"','yyyy-mm-dd') and ";
}
if(null!=type&&type.trim().length()>0)
{
   sw +=" item_jb_type = '"+type+"' or ";
}else{
    var num = roleList.indexOf("11e1-e794-366cc71f-ba1f-b158310cfd03");

    if(roleList.indexOf("11e1-e794-366cc71f-ba1f-b158310cfd03") > 0){
        sw +=" item_jb_type = '1' or ";
    }
    if(roleList.indexOf("11e1-e794-419c16f0-ba1f-b158310cfd03") > 0){
        sw +=" item_jb_type = '2' or ";
    }
    if(roleList.indexOf("11e1-e794-4b172711-ba1f-b158310cfd03") > 0){
        sw +=" item_jb_type = '3' or ";
    }
    if(roleList.indexOf("11e1-e794-55adb952-ba1f-b158310cfd03") > 0){
        sw +=" item_jb_type = '4' or ";
    }
}
if (sw.length > 0){
    sw = " and  (" + sw.substring(0,sw.length-3) + ")";
}
if (andStr.length > 0){
    andStr = "and "+ andStr.substring(0,andStr.length-4) ;
}

sql = sql + andStr+sw;
println(sql);
sql;                     

保存后报错,如果sql脚本去掉一半,就可以保存,后台日志报如下错误:
java.lang.Exception: org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update
        at cn.myapps.base.dao.PersistenceUtils.commitTransaction(PersistenceUtils.java:131)
        at cn.myapps.base.ejb.AbstractDesignTimeProcessBean.doUpdate(AbstractDesignTimeProcessBean.java:206)
        at cn.myapps.core.dynaform.view.ejb.ViewProcessBean$$EnhancerByCGLIB$$dcfaff98.CGLIB$doUpdate$17(<generated>)
        at cn.myapps.core.dynaform.view.ejb.ViewProcessBean$$EnhancerByCGLIB$$dcfaff98$$FastClassByCGLIB$$f933d6df.invoke(<generated>)
        at net.sf.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:167)
        at cn.myapps.protection.util.WarpProcessFactory.intercept(WarpProcessFactory.java:222)
        at cn.myapps.core.dynaform.view.ejb.ViewProcessBean$$EnhancerByCGLIB$$dcfaff98.doUpdate(<generated>)
        at cn.myapps.base.ejb.AbstractDesignTimeProcessBean.doCreateOrUpdate(AbstractDesignTimeProcessBean.java:300)
        at cn.myapps.core.dynaform.view.ejb.ViewProcessBean$$EnhancerByCGLIB$$dcfaff98.CGLIB$doCreateOrUpdate$29(<generated>)
        at cn.myapps.core.dynaform.view.ejb.ViewProcessBean$$EnhancerByCGLIB$$dcfaff98$$FastClassByCGLIB$$f933d6df.invoke(<generated>)
        at net.sf.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:167)
        at cn.myapps.protection.util.WarpProcessFactory.intercept(WarpProcessFactory.java:222)
        at cn.myapps.core.dynaform.view.ejb.ViewProcessBean$$EnhancerByCGLIB$$dcfaff98.doCreateOrUpdate(<generated>)
        at cn.myapps.base.action.BaseAction.doSave(BaseAction.java:160)
        at cn.myapps.core.dynaform.view.action.ViewAction.doSave(ViewAction.java:804)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at com.opensymphony.xwork.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:365)
        at com.opensymphony.xwork.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:217)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:191)
        at com.opensymphony.xwork.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:137)
        at com.opensymphony.xwork.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:81)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:189)
        at com.opensymphony.xwork.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:115)
        at com.opensymphony.xwork.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:81)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:189)
        字数限制,此处省略部分。。。
Caused by: org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update
        at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
        at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
        at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
        at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:249)
        at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:235)
        at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:140)
        at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
        at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
        at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
        at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
        at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
        at cn.myapps.base.dao.HibernateBaseDAO.commitTransaction(HibernateBaseDAO.java:755)
        at cn.myapps.base.dao.PersistenceUtils.commitTransaction(PersistenceUtils.java:129)
        ... 70 more
Caused by: java.sql.BatchUpdateException: ORA-01461: 仅可以为插入 LONG 列的 LONG 值赋值

        at oracle.jdbc.driver.DatabaseError.throwBatchUpdateException(DatabaseError.java:343)
        at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:10656)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.logicalcobwebs.proxool.ProxyStatement.invoke(ProxyStatement.java:100)
        at org.logicalcobwebs.proxool.ProxyStatement.intercept(ProxyStatement.java:57)
        at oracle.jdbc.internal.OraclePreparedStatement$$EnhancerByProxool$$343883c9.executeBatch(<generated>)
        at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48)
        at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:242)
        ... 79 more
bess 发表于 2012-9-26 11:49:14 | 显示全部楼层
本帖最后由 bess 于 2012-9-27 16:29 编辑

q上跟客户沟通之后,“仅可以为插入 LONG 列的 LONG 值赋值”错误是oracle数据库本身的blog字段就有的问题。解决方法是拆分字段,或者用存储过程代替sql模式。但是客户那边目前只能使用sql过滤模式。客户的需求所以无法实现。
回复

使用道具 举报

本版积分规则

手机版|天翎MyApps技术社区 ( 粤ICP备11093750号 )

GMT+8, 2026-8-14 07:16

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表