自己获取 Transaction,然后手工提交.

解决方案 »

  1.   

    手动通过Transaction提交后,抛异常啊
    for(int i; i<person.size(); i++){
                      Person  person = new  Person();
                      person.setPersonName(person.get(i).getPersonName());
                       person.setPersonCode(person.get(i).getPersonCode());
                       ...
                       this.getHibernateTemplate().saveOrUpdate( person);
                       // this.getSession().flush();
                       // super.getSession().refresh(prpDCompany);
                       //  this.getSession().clear();
    this.getSession().getTransaction().commit(); 
    }
    异常信息:
    org.hibernate.TransactionException: Transaction not successfully started
    at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:127) ~[hibernate-core-3.6.10.Final.jar:3.6.10.Final]
    at com.sinosoft.cargo.systemconfig.sysparamconfig.service.spring.CompanyConfigServiceSpringImpl.importExcelData(CompanyConfigServiceSpringImpl.java:170) ~[CompanyConfigServiceSpringImpl.class:na]
    at com.sinosoft.cargo.systemconfig.sysparamconfig.service.spring.CompanyConfigServiceSpringImpl$$FastClassByCGLIB$$aa7ebbea.invoke(<generated>) ~[CompanyConfigServiceSpringImpl$$FastClassByCGLIB$$aa7ebbea.class:na]
    at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) ~[cglib-nodep-2.2.2.jar:na]
    at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:700) ~[spring-aop-2.5.6.SEC03.jar:2.5.6.SEC03]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149) [spring-aop-2.5.6.SEC03.jar:2.5.6.SEC03]
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106) ~[spring-tx-2.5.6.SEC03.jar:2.5.6.SEC03]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) [spring-aop-2.5.6.SEC03.jar:2.5.6.SEC03]
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89) [spring-aop-2.5.6.SEC03.jar:2.5.6.SEC03]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) [spring-aop-2.5.6.SEC03.jar:2.5.6.SEC03]
    at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:635) [spring-aop-2.5.6.SEC03.jar:2.5.6.SEC03]
    at com.sinosoft.cargo.systemconfig.sysparamconfig.service.spring.CompanyConfigServiceSpringImpl$$EnhancerByCGLIB$$7e75572.importExcelData(<generated>) [CompanyConfigServiceSpringImpl$$EnhancerByCGLIB$$7e75572.class:na]
    at com.sinosoft.cargo.systemconfig.sysparamconfig.web.CompanyConfigAction.companyBatchImport(CompanyConfigAction.java:237) [CompanyConfigAction.class:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.6.0_13]
      

  2.   

    直接放到action中提交    这是最方便的方法
      

  3.   

    或者 捕获异常后不向上返回,直接return
      

  4.   


    this.getSession().beginTransaction().commit(); 试试
      

  5.   

    在for循环内部最开始的地方调用this.getSession().beginTransaction();
    在for循环内部结束的地方调用this.getSession().getTransaction().commit();
      

  6.   

    可不可以这样 
     for(){
        try{
         }catch(){
           continue;
        }
    }
      

  7.   

    import org.hibernate.Session;private EntityManager em;
    public void sendDuanXin(){
    Session session = em.unwrap(Session.class);
    session.doWork(new Work() {
    @Override
    public void execute(Connection conn) throws SQLException {
    //要设置自动提交
                                    conn.setAutoCommit(true);
    //查询要发送的微信List信息
    PreparedStatement  ps = conn.prepareStatement("update xxxx set xxxx=1 where id=?");
    ps.setLong(1, xx.getId());
    int s = ps.executeUpdate();
    }
    });
    }
    --- 你试一下!我们 做短时间 定时任务 时 这样 做的!
      

  8.   

    看见结贴率低了,就不想回答。仔细想想,算了,再将就一次吧,万一是救人于水火之中呢 嘿嘿
    this.getHibernateTemplate().execute(new HibernateCallback() { @Override
    public Object doInHibernate(Session session) throws HibernateException {
    session.setFlushMode(FlushMode.AUTO);
    Object o = session.save(file2);
    session.flush();
    session.clear();
    return o;
    }
    }); 
    每次调这个方法,或者传进来个list   只要flash了就会进库