我正致力于使用Spring Framework 3.0.5和Hibernate Framework 3.6开发Web应用程序,我已经收到了一些问题。我使用带有注释的事务管理。 (@Transactional)和我的DAO是用简单的Hibernate 3 API编写的。
1)如何注意到事务已回滚? (我的意思是,我必须捕捉异常?或者可能在之后检查,如果一切正常?围绕@traffical-methods with try-catch对我来说似乎不是一件好事)
2)当我捕获异常时,使用@transactional的事务管理不起作用(不回滚)是否正确? (当我用try-catch包围事务方法的调用时)
3)是否可以使用Hibernate WITHOUT使用事务?所以我可以使用Spring与Hibernate,但没有事务管理?
4)如果不使用Hibernate而不使用事务,这意味着我的数据库管理系统必须始终支持事务引擎(如InnoDB)。我不能使用myISAM表和hibernate吗?那将是hibernate的一大缺点!?
谢谢你: - )答案 0 :(得分:3)
如果从使用@Transactional注释的方法抛出运行时异常,Spring将自动回滚事务。您通常不关心它是否回滚,因为异常将传播到调用堆栈。如果您确实需要知道事务是否已回滚,请使用TransactionAspectSupport.currentTransactionStatus().isRollbackOnly()
。
没有。如果捕获从事务方法抛出的运行时异常,则回滚用于运行此方法的事务。
没有。你需要使用Hibernate的事务,这是一件好事。在没有交易的情况下进行数据库工作是灾难的一种方法。
是的,您需要一个交易引擎。