0

我在我的项目中使用 spring 3.2 和 Hibernate 4。当我查询表时,我收到“未找到当前线程的会话”消息。我尝试使用@Transactional 注释(它会成功),但我不想将@Transactional 放到每个服务实现中。

还有其他方法吗?

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

谢谢...

4

2 回答 2

2

你不应该有@Transactional你的 DAO 方法,事实上你不应该直接访问你的 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)
}
于 2013-07-11T12:46:36.957 回答
0

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

于 2013-07-11T08:57:57.647 回答