最近做个项目, 上面的老大交代不要用tomcat等服务器(不让用web容器)
我打算用hibernate和spring
我最近连接在linux上的mysql数据库查询的时候
速度很慢, 执行一条save语句都要20秒以上
也许跟公司网络有关系(间歇性断网), 或则我的spring配置也有问题
老报错误
java.net.SocketException: Connection reset
org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is org.hibernate.TransactionException: JDBC begin failed
Caused by: org.hibernate.TransactionException: JDBC begin failed:
我的spring配置文件中用的默认连接池, 但我没怎么配置, 现在贴出代码大家帮忙分析下出现上述问题的原因:<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans 
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
           
<context:annotation-config />
<!-- 指定要被扫描的包 -->  
<context:component-scan base-package="com.xx.eop" /> <bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<value>classpath:jdbc.properties</value>
</property>
</bean> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${driverClassName}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
<!-- 连接池支持的最大连接数  
<property name="maxActive" value="" />
-->
</bean>
<!-- 定义Hibernate的SessionFactory -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<!-- 依赖注入数据源,注入正是上面定义的dataSource -->
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan">
<list>
<value>com.timesafer.eop.model</value>
</list>
</property>

<!-- 定义Hibernate的SessionFactory的属性 -->
<property name="hibernateProperties">
<props>
<!-- 指定数据库方言 -->
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
<!-- 显示Hibernate持久化操作所生成的SQL -->
<prop key="hibernate.show_sql">true</prop>
<!-- 将SQL脚本进行格式化后再输出 -->
<prop key="hibernate.format_sql">true</prop>
<!-- 是否根据需要每次自动创建数据库 -->
<prop key="hibernate.hbm2ddl.auto">update</prop>
<!-- 
<prop key="hibernate.jdbc.batch_size">10</prop>
 -->
</props>
</property>
</bean>

<!-- 配置Hibernate的局部事务管理器,使用HibernateTransactionManager类 -->
    <!-- 该类实现PlatformTransactionManager接口,是针对Hibernate的特定实现-->
<bean id="txManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<!-- 配置HibernateTransactionManager时需要依注入SessionFactory的引用 -->
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<aop:config>
<!--  配置一个切入点,匹配xxxx包下的类的所有方法的执行 -->
<aop:pointcut id="servicePointcut" expression="execution(* com.timesafer.eop.manager.*.*(..))" />
 <!-- 指定在bussinessService切入点应用serviceAdvice事务切面 --> 
<aop:advisor advice-ref="serviceAdvice" pointcut-ref="servicePointcut" />
</aop:config> <!-- 配置事务切面Bean,指定事务管理器 -->
<tx:advice id="serviceAdvice" transaction-manager="txManager">
<!-- 用于配置详细的事务语义 -->
<tx:attributes>
<!-- 所有以'get'开头的方法(查询)是read-only的-->
<tx:method name="get*" read-only="true" />
<!--其他方法使用默认的事务设置--> 
<tx:method name="in*" propagation="REQUIRED" />
<tx:method name="sav*" propagation="REQUIRED" />
<tx:method name="send*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>

<!-- hibernateTemplate 配置 -->
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
</beans>
我的测试类public class TestSH {

public static void testAdd() {
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
OrderManager orderManager = (OrderManager)ctx.getBean("orderManager");
LogisticsCompany lCom = new LogisticsCompany();
lCom.setId(5);
lCom.setCode("SFabc");
lCom.setName("物流公司test");
orderManager.save(lCom);
ClassPathXmlApplicationContext context = (ClassPathXmlApplicationContext)ctx;
context.destroy();
}

public static void main(String[] args) {
testAdd();
}
}
还请各位高手说下hibernate批量处理数据的问题, 我在for循环里每保存一条数据就必须得flush()和clear()一下
否则, 我前面的数据就被后面的覆盖了, 这是代码, 应该不对的, spring的配置里该怎么配置才可以让我不每次flush呢                                this.hibernateTemplate.save(order);
this.hibernateTemplate.getSessionFactory().getCurrentSession()
.flush();
this.hibernateTemplate.getSessionFactory().getCurrentSession()
.clear();

解决方案 »

  1.   

    spring能用, Hibernate能用吗??
      没试过!
    期待解决
      

  2.   

    应该能用,用框架无非是加一些jar包吗?只有将依赖的jar包加入到工程里面,就没有问题!!
      

  3.   

    spring 和 hibernate 不区分是不是web项目...
    都能用...只要你写一个main函数启动加载spring配置文件,启动spring,
    然后让spring启动hibernate即可2个都可以单独用在项目中
      

  4.   

    嗯, 是可以用spring+hibernate 
    我现在的目的是请求大家帮我看下上面的配置, 以及程序的写法
    spring有上面问题吗? 没问题为什么连 远程的数据库 这么慢呢, 是不是跟连接池有关系
    配连接池好吗?还是不配好还有就是hibernate批量处理数据(比如批量存储)要注意些上面? 搞得我每次存一条数据就要
    this.hibernateTemplate.getSessionFactory().getCurrentSession().flush();
    this.hibernateTemplate.getSessionFactory().getCurrentSession().clear();
    不然我后面的数据就被前面的覆盖掉了请各位高手指教
      

  5.   

    错了
    "上面"替换为"什么"
    spring配置有什么问题吗
    注意些什么?下面代码有什么问题
    public class TestSH {
        
        public static void testAdd() {
            ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
            OrderManager orderManager = (OrderManager)ctx.getBean("orderManager");
            LogisticsCompany lCom = new LogisticsCompany();
            lCom.setId(5);
            lCom.setCode("SFabc");
            lCom.setName("物流公司test");
            orderManager.save(lCom);
            ClassPathXmlApplicationContext context = (ClassPathXmlApplicationContext)ctx;
            context.destroy();
        }
        
        public static void main(String[] args) {
            testAdd();
        }
    }
      

  6.   

    完全可以应该是代码问题你save的order 是在for里new的?
      

  7.   

    不是, 我的order是在for循环外面new的我在spring配置文件bean.xml里已经配置了事务了那下面的代码是不是多此一举ClassPathXmlApplicationContext context = (ClassPathXmlApplicationContext)ctx;
    context.destroy();
      

  8.   

    我的 存order方法  ,  order 一对多 orderdetail, 我存order就同时保存了orderdetailpublic void init() {
    String sessionKey = EOPConstant.SESSION_KEY;
    String resultStr = getOrderParam(sessionKey);
    String hql = "select o.oExId from Order o where o.oCreateDatetime=(select max(o.oCreateDatetime) from Order o)";
    String oExId = (String)this.getHibernateTemplate().getSessionFactory().getCurrentSession().createQuery(hql).uniqueResult();
    System.out.println("編號" + oExId);
    // 对返回的xml结果字符串,进行解析,组装成java对象
    StringReader read = new StringReader(resultStr);
    InputSource source = new InputSource(read);
    SAXBuilder builder = new SAXBuilder();
    Order order = new Order();
    // OrderDetail orderDetail = new OrderDetail();
    // List<OrderDetail> orderDetails = new ArrayList<OrderDetail>();
    Document document;
    String refund_status = "";
    try {
    document = builder.build(source);
    Element root = document.getRootElement();
    Element tradesEle = root.getChild("trades");
    if (tradesEle == null) {
    throw new RuntimeException("暂时还没有等待发货的订单");
    }
    List<Element> tradeEles = tradesEle.getChildren("trade");

    for (int i = 0; i < tradeEles.size(); i++) {

    Element tradeEle = tradeEles.get(i);
    //去除本地数据库已经有了的记录
    // if (tradeEle.getChildText("tid").equals(oExId)) {
    // System.out.println("去除重复的记录");
    // continue;
    // }
    Element ordersEle = tradeEle.getChild("orders");
    List<Element> orderEles = ordersEle.getChildren("order");
    List<OrderDetail> orderDetails = new ArrayList<OrderDetail>();
    ProductType pType = new ProductType();
    for (int j = 0; j < orderEles.size(); j++) {
    OrderDetail orderDetail = new OrderDetail();
    Element orderEle = orderEles.get(j);
    String productType = orderEle.getChildText("num_iid");
    int price = (int) Double.parseDouble(orderEle
    .getChildText("price"));
    if (productType.equals("6000014942")) {
    pType = (ProductType) this.getHibernateTemplate().load(
    ProductType.class, 3);
    } else if (productType.equals("6000014926")) {
    pType = (ProductType) this.getHibernateTemplate().load(
    ProductType.class, 1);
    } else if (productType.equals("6000014916")) {
    pType = (ProductType) this.getHibernateTemplate().load(
    ProductType.class, 2);
    }
    orderDetail.setPType(pType);
    String pNum = orderEle.getChildText("num");
    refund_status = orderEle.getChildText("refund_status");
    orderDetail.setPNum(Integer.parseInt(pNum));
    orderDetails.add(orderDetail);
    }
    if (refund_status.equals("NO_REFUND")) {
    order.setOMark(false);
    } else {
    //说明对方已经在走退款流程
    order.setOMark(true);
    }

    order.setOrderDetails(orderDetails);
    order.setOExId(tradeEle.getChildText("tid"));
    order.setOCreateDatetime(new SimpleDateFormat(
    "yyyy-MM-dd HH:mm:ss").parse(tradeEle
    .getChildText("created")));
    // order.setShippingDatetime(new SimpleDateFormat(
    // "yyyy-MM-dd HH:mm:ss").parse(tradeEle
    // .getChildText("consign_time")));
    order.setOType(OrderType.TAOBAO);
    order.setOTotalFee((int) Double.parseDouble(tradeEle
    .getChildText("total_fee"))); if (tradeEle.getChildText("status").equals("TRADE_FINISHED")) {
    order.setOStatus(OrderStatus.TRADE_FINISHED);
    } else if (tradeEle.getChildText("status").equals(
    "WAIT_SELLER_SEND_GOODS")) {
    order.setOStatus(OrderStatus.WAIT_SELLER_SEND_GOODS);
    } else if (tradeEle.getChildText("status").equals(
    "WAIT_BUYER_CONFIRM_GOODS")) {
    order.setOStatus(OrderStatus.WAIT_BUYER_CONFIRM_GOODS);
    } else if (tradeEle.getChildText("status").equals(
    "TRADE_NO_CREATE_PAY")
    || tradeEle.getChildText("status").equals(
    "WAIT_BUYER_PAY")
    || tradeEle.getChildText("status").equals(
    "ALL_WAIT_PAY")) {
    order.setOStatus(OrderStatus.TRADE_CREATED);
    } else if (tradeEle.getChildText("status").equals(
    "TRADE_CLOSED")
    || tradeEle.getChildText("status").equals(
    "TRADE_CLOSED_BY_TAOBAO")
    || tradeEle.getChildText("status").equals("ALL_CLOSED")) {
    order.setOStatus(OrderStatus.TRADE_CLOSED);
    }
    String address = tradeEle.getChildText("receiver_state") + "_"
    + tradeEle.getChildText("receiver_city") + "_"
    + tradeEle.getChildText("receiver_district") + "_"
    + tradeEle.getChildText("receiver_address") + "_" + "("
    + tradeEle.getChildText("receiver_zip") + ")";
    order.setReceiverAddress(address);
    order.setReceiverMobile(tradeEle.getChildText("receiver_mobile"));
    order.setReceiverPhone(tradeEle.getChildText("receiver_phone"));
    order.setReceiverName(tradeEle.getChildText("receiver_name"));
    order.setPayDatetime(new SimpleDateFormat(
    "yyyy-MM-dd HH:mm:ss").parse(tradeEle.getChildText("pay_time")));
    order.setPayChannel(PayChannel.ALIPAY);
    order.setPayType(PayType.DIRECTLY_PAY);
    order.setBuyerId(tradeEle.getChildText("buyer_nick"));
    order.setBuyerName(tradeEle.getChildText("buyer_nick"));
    order.setBuyerEmail(tradeEle.getChildText("buyer_email"));
    order.setFreight(FreightPayer.SELLER);
    order.setPayment((int) Double.parseDouble(tradeEle
    .getChildText("payment")));
    order.setShipper(Shipper.FACTORY);
    if (tradeEle.getChildText("status").equals(
    "WAIT_BUYER_CONFIRM_GOODS")
    || tradeEle.getChildText("status").equals(
    "TRADE_FINISHED")) {
    order.setShippingDatetime(new SimpleDateFormat(
    "yyyy-MM-dd HH:mm:ss").parse(tradeEle
    .getChildText("consign_time")));
    } else {
    order.setShippingDatetime(null);
    }
    this.hibernateTemplate.save(order);
    this.hibernateTemplate.getSessionFactory().getCurrentSession()
    .flush();
    this.hibernateTemplate.getSessionFactory().getCurrentSession()
    .clear();
    } } catch (JDOMException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    } catch (ParseException e) {
    e.printStackTrace();
    }
    }
      

  9.   

    我在本地数据库一点问题都没,为什么连接远程的数据库就报这样的错误呢exception: ** BEGIN NESTED EXCEPTION ** java.net.SocketException
    MESSAGE: Connection reset by peer: socket write errorSTACKTRACE:java.net.SocketException: Connection reset by peer: socket write error
    at java.net.SocketOutputStream.socketWrite0(Native Method)
    at java.net.SocketOutputStream.socketWrite(Unknown Source)
    at java.net.SocketOutputStream.write(Unknown Source)
    at java.io.BufferedOutputStream.flushBuffer(Unknown Source)
    at java.io.BufferedOutputStream.flush(Unknown Source)
    at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2739)
    at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2650)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1581)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1695)
    at com.mysql.jdbc.Connection.execSQL(Connection.java:3004)
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1128)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1357)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1274)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1259)
    at org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:102)
    at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:94)
    at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:57)
    at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2176)
    at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2656)
    at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:71)
    at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)
    at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:321)
    at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204)
    at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:130)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)
    at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)
    at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:50)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
    at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:563)
    at org.hibernate.impl.SessionImpl.save(SessionImpl.java:551)
    at org.hibernate.impl.SessionImpl.save(SessionImpl.java:547)
    at org.springframework.orm.hibernate3.HibernateTemplate$12.doInHibernate(HibernateTemplate.java:697)
    at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:419)
    at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
    at org.springframework.orm.hibernate3.HibernateTemplate.save(HibernateTemplate.java:694)
    at com.timesafer.eop.manager.impl.OrderManagerImpl.save(OrderManagerImpl.java:553)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
    at $Proxy15.save(Unknown Source)
    at com.timesafer.eop.action.TestSH.testAdd(TestSH.java:18)
    at com.timesafer.eop.action.TestSH.main(TestSH.java:24)
    ** END NESTED EXCEPTION **Last packet sent to the server was 0 ms ago.
    15:29:22,328 ERROR JDBCTransaction:232 - Could not toggle autocommit
    java.sql.SQLException: No operations allowed after connection closed.Connection was implicitly closed due to underlying exception/error:
    ** BEGIN NESTED EXCEPTION ** com.mysql.jdbc.CommunicationsException
    MESSAGE: Communications link failure due to underlying exception: ** BEGIN NESTED EXCEPTION ** java.net.SocketException
    MESSAGE: Connection reset by peer: socket write errorSTACKTRACE:java.net.SocketException: Connection reset by peer: socket write error
    at java.net.SocketOutputStream.socketWrite0(Native Method)
    at java.net.SocketOutputStream.socketWrite(Unknown Source)
    at java.net.SocketOutputStream.write(Unknown Source)
    at java.io.BufferedOutputStream.flushBuffer(Unknown Source)
    at java.io.BufferedOutputStream.flush(Unknown Source)
    at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2739)
    at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2650)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1581)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1695)
    at com.mysql.jdbc.Connection.execSQL(Connection.java:3004)
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1128)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1357)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1274)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1259)
    at org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:102)
    at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:94)
    at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:57)
    at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2176)
    at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2656)
    at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:71)
    at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)
    at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:321)
    at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204)
    at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:130)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)
    at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)
    at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:50)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
    at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:563)
    at org.hibernate.impl.SessionImpl.save(SessionImpl.java:551)
    at org.hibernate.impl.SessionImpl.save(SessionImpl.java:547)
    at org.springframework.orm.hibernate3.HibernateTemplate$12.doInHibernate(HibernateTemplate.java:697)
    at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:419)
    at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
    at org.springframework.orm.hibernate3.HibernateTemplate.save(HibernateTemplate.java:694)
    at com.timesafer.eop.manager.impl.OrderManagerImpl.save(OrderManagerImpl.java:553)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
    at $Proxy15.save(Unknown Source)
    at com.timesafer.eop.action.TestSH.testAdd(TestSH.java:18)
    at com.timesafer.eop.action.TestSH.main(TestSH.java:24)
    ** END NESTED EXCEPTION **

      

  10.   

    我在spring配置文件bean.xml里已经配置了事务了那下面的代码是不是多此一举(请注意我的项目没有tomcat等容器)ClassPathXmlApplicationContext context = (ClassPathXmlApplicationContext)ctx;
    context.destroy();