rt:
public class Test{
Configuration con = new Configuration().configure("hibernate.cfg.xml");
SessionFactory sf = con.buildSessionFactory();
Transaction tx = null; public void test(){
String sql = "";
String sql1 = "";
String sql2 = "";
String sql3 = ""; Session session = sf.openSession();
tx = session.beginTransaction();
tx.begin();
try {
session.createQuery(sql).executeUpdate();
session.createQuery(sql1).executeUpdate();
session.createQuery(sql3).executeUpdate();
session.createQuery(sql4).executeUpdate();
tx.commit();
}
catch (Exception e){
tx.rollback();
}
finally {
if (session != null) {
session.close();
}
}
}
}
请问如何正确关闭这里的session.应该关几次。是我执行完第一个修改后就需要关闭一次吗,这样关闭有问题吗?如果有,请问出在哪。正确的应该怎么操作。谢谢。
public class Test{
Configuration con = new Configuration().configure("hibernate.cfg.xml");
SessionFactory sf = con.buildSessionFactory();
Transaction tx = null; public void test(){
String sql = "";
String sql1 = "";
String sql2 = "";
String sql3 = ""; Session session = sf.openSession();
tx = session.beginTransaction();
tx.begin();
try {
session.createQuery(sql).executeUpdate();
session.createQuery(sql1).executeUpdate();
session.createQuery(sql3).executeUpdate();
session.createQuery(sql4).executeUpdate();
tx.commit();
}
catch (Exception e){
tx.rollback();
}
finally {
if (session != null) {
session.close();
}
}
}
}
请问如何正确关闭这里的session.应该关几次。是我执行完第一个修改后就需要关闭一次吗,这样关闭有问题吗?如果有,请问出在哪。正确的应该怎么操作。谢谢。
这个类 extends HibernateDaoSupport implements
testDao我也想用hibernate 的事务。我不会配。事务不起效果。晕。只有用hibernate的session了。
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="is*" propagation="REQUIRED" />
<tx:method name="find*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="delete*" propagation="REQUIRED"/>
<tx:method name="*" read-only="false" />
</tx:attributes>
</tx:advice> <!--定义使用事务的方法的路径 那些类使用事务 -->
<aop:config>
<aop:pointcut id="cimSms"
expression="execution(* com.test.dao.*.*(..))" />
//请问这里的路径应该指向。dao还是daoImpl啊
<aop:advisor advice-ref="txAdvice" pointcut-ref="cimSms" />
</aop:config>
我这样配置的。但事务不想效果。
<tx:method name="is*" propagation="REQUIRED" />这里已经提定事务。就是不起用
用Spring来管理数据源和事务吧...<!-- TransactionManager事务管理器 -->
<bean id="myTransactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<tx:annotation-driven transaction-manager="myTransactionManager"/>
然后 dao最好是进行数据库操作好,避免和业务有关联。然后用一个service层来专门处理业务逻辑,这样的话 把事务配置对应到service的接口上就行。对于session, spring里面的session是自己创建,关闭不需要关心,除非使用hibernate的sessionfactory来opSession方式获取的,那么必须自己手动关闭。
如果不使用spring托管时:
1、如果没有表关联,直接在你的方法中关闭就行了
2、有表关联,存在延迟加载的话,将关闭代码封在一个方法里如果使用spring托管1、如果没有表关联,不用管
2、有关联,在web.xml中加入监听器,其余不用管了