Eclipse自动生成的Hibernater的DAO类该怎么用过对啊?
为什么我每次使用DAO来更新或插入数据后,再对其进行查询,总是会出现被更新的数据有时显示已经更新,有时又没更新
我通过刷新网页来查询,似乎每次刷新取出来的数据都是随机的,一会正确,一会儿又是脏数据,这到底是怎么回事?另外,
我想知道Eclipse自动生成的Hibernater的DAO类怎么正确地使用事务操作?
为什么我每次使用DAO来更新或插入数据后,再对其进行查询,总是会出现被更新的数据有时显示已经更新,有时又没更新
我通过刷新网页来查询,似乎每次刷新取出来的数据都是随机的,一会正确,一会儿又是脏数据,这到底是怎么回事?另外,
我想知道Eclipse自动生成的Hibernater的DAO类怎么正确地使用事务操作?
{
Session session=null;
Transaction tr=null;
try
{
session=super.getSession();
tr=session.beginTransaction();
查询数据库....
tr.commit();
}catch (RuntimeException e) {
if(tr!=null)
tr.rollback();
}finally{
this.flushSessionAndTransaction(session,tr)
}
} private void flushSessionAndTransaction(Session session, Transaction tr)
{
if(null!=session&&session.isOpen())
{
session.close();
session=null;
tr=null;
}
}
不过话说一般都用spring管理事务的多 DAO里面一个一个写麻烦
不过我还是给你加5分,起码回答了我问题:Eclipse自动生成的Hibernater的DAO类怎么正确地使用事务操作?
1,将<bean...>替换为<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">2,在根标签<bean></bean>中添加通用事务管理器和指定事务策略,再声明一个config,用以将事务策略和业务类关联起来,具体如下:
<!--通用事务管理器-->
<bean id="TransactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!--指定事务策略,声明一个通知,用以指出要管理哪些事务方法及如何管理-->
<tx:advice id="txAdvice" transaction-manager="TransactionManager">
<tx:attributes>
<!-- 对get/load/search开头的方法要求只读事务 -->
<tx:method name="find*" propagation="SUPPORTS"
read-only="true" />
<!-- 对其它方法要求事务 -->
<tx:method name="*" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>
<!--声明一个config,用以将事务策略和业务类关联起来-->
<aop:config>
<!-- 添加事务支持,因为前面配置的transactionManager是专对Hibernate的事务管理器-->
<aop:pointcut id="bizMethods" expression="execution(* bank.biz..*.*(..))" />
<!-- 织入 -->
<aop:advisor advice-ref="txAdvice" pointcut-ref="bizMethods" />
</aop:config>
以上代码,除将事务策略和业务类关联的时候需要更改以外,其它处无需更改,直接复制即可用,更改处说明如下:
expression="execution(* bank.biz..*.*(..))" 中的bank.biz是包名,后面的..*意思是包含子包,如果不想子包里的方法也要用到事物更改,那么就可改为一个“.”;
如有不明处,可问我!