在Spring3.2中,我们应该为db活动使用@Transactional注释吗?

在Spring3.2中,我们应该为db活动使用@Transactional注释吗?,spring,hibernate,transactions,Spring,Hibernate,Transactions,我在项目中使用Spring3.2和Hibernate4。当我查询表时,我得到一条“没有找到当前线程的会话”消息。我尝试使用@Transactional注释(它获得了成功),但我不想将@Transactional应用到每个服务实现中 还有别的办法吗 换句话说,“如何在不使用@Transaction的情况下执行简单的“插入”操作?” Thx…@Transactional用于在事务中进行java代码调用,以便在该过程中发生任何异常时,所有数据库更改都将回滚。在理想情况下,您认为应该独立的每个服务都应该

我在项目中使用Spring3.2和Hibernate4。当我查询表时,我得到一条“没有找到当前线程的会话”消息。我尝试使用@Transactional注释(它获得了成功),但我不想将@Transactional应用到每个服务实现中

还有别的办法吗

换句话说,“如何在不使用@Transaction的情况下执行简单的“插入”操作?”


Thx…

@Transactional用于在事务中进行java代码调用,以便在该过程中发生任何异常时,所有数据库更改都将回滚。在理想情况下,您认为应该独立的每个服务都应该有@Transactional注释。Hibernate还希望在事务中调用每个数据库,这就是为什么它们以这样的方式实现,即每个数据库查询都需要事务才能成功。我不知道为什么您希望您的服务处于事务之外,但他们仍然希望启动数据库调用。

您不应该在DAO方法上使用
@Transactional
,事实上,您永远不应该直接访问DAO方法,您应该使用
@service
。服务将使用零个或多个DAO类来执行操作,只有在所有操作完成后,事务才会提交

@Repository
public class CustomerDao() {
    // dao methods here, they are not transactional but will be run within a sevice transaction
}

@Service
@Transactional
public class CustomerService() {

   private final CustomerDao customerDao;

   @Autowired
   public CustomerService(CustomerDao customerDao) {
       this.customerDao = customerDao;
   }

   //service methods here (they are all transactional because we have annotated the class)
}

我只希望我的DAO类在没有额外@Transactional注释的情况下执行db活动。如果我想要事务,我就使用它,但对于简单的活动,我不想使用它。什么是“简单活动”?没有事务,就不可能使用hibernate启动sql。我不知道为什么要跳过事务…@willome simple activity可以是任何插入、更新、选择操作。@Rajesh,因为我不想在任何地方都使用它,只是需要交易的地方。你不能也不应该。