在dao模式下 的事务性问题

在dao模式下 业务逻辑在 service层 比如一个service的方法要 调用几个dao的方法来实现业务逻辑的话 那怎么保证 事务性啊?

这个要看你的框架是怎么实现的
[color=blue]目前有一种是在DAO层实现事务的管理,所有的数据控制在这一层。这样会出现你的问题,一个service里面调用多个DAO没有办法保证一致性。[/color]
[color=red]另一种框架是控制事务在service层,这样就不会出现你的那种问题。[/color]

我觉得第一你可以尝试修改一下框架。按第二种方式去实现。
另一种办法就是对于调用多个DAO的service这部分自己去实现。设置不自动提交。
然后操作后手动提交。失败了就rollback。网上应该很容易可以找到这样的例子。

用Spring来配置管理事物吧. 直接配置在Service中;

把事务控制在service,那是比较好的实现方式。可以使用spring进行声明式事务配置,例如:
[code="xml"] <!--定义了hibernate的事务管理器 -->
class="org.springframework.orm.hibernate3.HibernateTransactionManager">

<!-- 将proxy-target-class设为true,说明强制使用cglib代理 -->
<aop:config proxy-target-class="true">
    <aop:advisor
        pointcut="execution(* com.hnjk.gdpolice.service.impl.*Service*.*(..))"
        advice-ref="txAdvice" />
</aop:config>

<!-- 基本事务定义,使用transactionManager作事务管理 -->
<tx:advice id="txAdvice" transaction-manager="hibernateTransactionManager">
    <tx:attributes>
        <tx:method name="get*" read-only="true" />
        <tx:method name="find*" read-only="true" />
        <tx:method name="select*" read-only="true" />
        <tx:method name="query*" read-only="true" />
        <tx:method name="pageQuery*" read-only="true" />
        <tx:method name="*" />
    </tx:attributes>
</tx:advice>[/code]

事务控制最好在service层。

dao层只是实现最原子的数据库操作,不要带有业务逻辑,业务逻辑都封装在service层。