15 个解决方案
#1
+1+1+1+1+1
#2
因为spring已经帮你做了这些事情 不需要你做了
#3
spring事务已经帮你把这些都做了,不用再自己动手去打开session或关闭session
#4
事务开始到事务结束
#5
在事务开始的时候打开Session,事务完成后关闭Session,使用Hibernate和Spring都需要这个操作,只不过Spring内部封装好了方法来自动打开和关闭Session,不需要手动关闭了!
#6
因为hibernate的事务交给了SPring管理。你去看applicationCOntext.xml中就看到有事务配置。通过AOP,在你的业务方法执行前打开事务,开启session,执行后就关闭事务,关闭session.
#7
+1
#8
正解
#9
spring中不是把session交给org.springframework.orm.hibernate3.HibernateTransactionManager这个类管理了吗?
#10
你加入的Spring支持里不是有SessionFactory吗?你自己看看,有没有打开和关闭session的方法?????
#11
学习了
#12
会不会是这样。。。
SessionFactory sf;
public HibernateTemplate getHibernateTemplate() {
//...
Configuration cfg = new Configuration().configure(...xml);
sf = cfg.buildSessionFactory();
}
public List find(String hql) {
Session session = sf.openSession();
session....
session.close();
}
SessionFactory sf;
public HibernateTemplate getHibernateTemplate() {
//...
Configuration cfg = new Configuration().configure(...xml);
sf = cfg.buildSessionFactory();
}
public List find(String hql) {
Session session = sf.openSession();
session....
session.close();
}
#13
继续 。。。高手呢?
#14
一般来说spring内部已经封装了对Hibernate的session的开启和关闭,但是是它是在你用到super.getHibernateTemplate()时就会开启session,用完session就会关闭,事务就会自动提交 LZ如果想要控制session的开启和关闭,可以在application.xml里进行事务通知配置
<!--配置事务管理器-->
<bean id="myManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
<tx:advice id="txAdvice" transaction-manager="myManager">
<tx:attributes>
<!--配置需要事务提交的方法-->
<tx:method name="find*" propagation="SUPPORTS"/><!--在查询方法执行完后事务不需进行提交-->
<tx:method name="add*" propagation="REQUIRED" rollback-for="Exception"/><!--在执行增加数据的时候需要提交,这时只有add方法执行完session才会关闭,事务就会提交-->
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut expression="execution(* .*.* (..))" id="pc"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="pc"/>
</aop:config>
#15
另外要想让session持续一段时间再关闭还可以在web.xml中进行OpenSessionInViewFilter配置
这样只有当当前请求(request)关闭,session才会相应关闭,LZ可以google这方面的资料
<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
<init-param>
<param-name>singleSession</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
这样只有当当前请求(request)关闭,session才会相应关闭,LZ可以google这方面的资料
#1
+1+1+1+1+1
#2
因为spring已经帮你做了这些事情 不需要你做了
#3
spring事务已经帮你把这些都做了,不用再自己动手去打开session或关闭session
#4
事务开始到事务结束
#5
在事务开始的时候打开Session,事务完成后关闭Session,使用Hibernate和Spring都需要这个操作,只不过Spring内部封装好了方法来自动打开和关闭Session,不需要手动关闭了!
#6
因为hibernate的事务交给了SPring管理。你去看applicationCOntext.xml中就看到有事务配置。通过AOP,在你的业务方法执行前打开事务,开启session,执行后就关闭事务,关闭session.
#7
+1
#8
正解
#9
spring中不是把session交给org.springframework.orm.hibernate3.HibernateTransactionManager这个类管理了吗?
#10
你加入的Spring支持里不是有SessionFactory吗?你自己看看,有没有打开和关闭session的方法?????
#11
学习了
#12
会不会是这样。。。
SessionFactory sf;
public HibernateTemplate getHibernateTemplate() {
//...
Configuration cfg = new Configuration().configure(...xml);
sf = cfg.buildSessionFactory();
}
public List find(String hql) {
Session session = sf.openSession();
session....
session.close();
}
SessionFactory sf;
public HibernateTemplate getHibernateTemplate() {
//...
Configuration cfg = new Configuration().configure(...xml);
sf = cfg.buildSessionFactory();
}
public List find(String hql) {
Session session = sf.openSession();
session....
session.close();
}
#13
继续 。。。高手呢?
#14
一般来说spring内部已经封装了对Hibernate的session的开启和关闭,但是是它是在你用到super.getHibernateTemplate()时就会开启session,用完session就会关闭,事务就会自动提交 LZ如果想要控制session的开启和关闭,可以在application.xml里进行事务通知配置
<!--配置事务管理器-->
<bean id="myManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
<tx:advice id="txAdvice" transaction-manager="myManager">
<tx:attributes>
<!--配置需要事务提交的方法-->
<tx:method name="find*" propagation="SUPPORTS"/><!--在查询方法执行完后事务不需进行提交-->
<tx:method name="add*" propagation="REQUIRED" rollback-for="Exception"/><!--在执行增加数据的时候需要提交,这时只有add方法执行完session才会关闭,事务就会提交-->
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut expression="execution(* .*.* (..))" id="pc"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="pc"/>
</aop:config>
#15
另外要想让session持续一段时间再关闭还可以在web.xml中进行OpenSessionInViewFilter配置
这样只有当当前请求(request)关闭,session才会相应关闭,LZ可以google这方面的资料
<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
<init-param>
<param-name>singleSession</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
这样只有当当前请求(request)关闭,session才会相应关闭,LZ可以google这方面的资料