【发布时间】:2014-11-30 10:03:28
【问题描述】:
好吧,我可能在这个问题上错了,但我需要您的宝贵意见/建议才能站在正确的道路上。
我想知道Spring+Hibernate和@中处理事务管理的好、更好和最佳方式987654323@ + JDBCTemplate 各有优劣。
我知道可以这样做的一些方案/方法是:
1) Spring Transaction Management using AOP Annotations(@Aspect, @PointCut with Advice like @Before, @After, @Around etc)。
问题 - 1:我之前使用 Spring AOP 完成了一个 Logging 示例,但我不知道如何为事务管理做同样的事情。事务开始、回滚和提交是否将在该 Aspect 类中使用 @Before、@After、@Around 之类的建议完成?请为此分享一些代码示例/sn-p。
问题 - 2:这种方法是否需要 Hibernate Transaction Manager 强烈要求,或者不需要它也可以实现?
2) Spring Transaction Manager with @Transactional Annotation :另一个涉及 Hibernate Transaction Manager 的事务管理方案,用于使用 @Transactional Annotation 进行声明式事务管理。
问题 - 3:在方法上使用@Transactional注解可以保证该方法体中的所有事务管理,但是您将如何在 Multi-DAO 操作中以这种方式管理回滚功能该特定方法中的不同实体?说,您在该方法中执行 3-4 次不同的 DAO 操作(在具有 @Transactional 的不同 DAO 方法上),并且在第 3 次 DAO 操作时发生一些异常,您将如何回滚。
请分享您的观点!
问候,
阿伦
【问题讨论】:
-
为什么要重新发明轮子并尝试实现自己的事务管理?所以恕我直言选项1不是一个选项。要将 Spring 与事务一起使用,您需要一个
PlatformTransactionManager实现,具体使用取决于您使用哪种持久性机制,或者您是否需要使用 JTA。您的事务边界应该是服务层而不是单个 dao 方法(如果您使用后者,您将有多个事务而不是一个)。 -
@M. Deinum:这是否意味着没有像带有AOP注释的事务管理:
@Before和@After或者以这种方式使用它们不是正确的选择? -
你最好的选择确实是带有@Transactional注解的Spring Transaction Manager。如果你从另一个 DAO 调用 DAO,它们都是事务性的,原子性没有问题,整个事务是原子的,所有调用都会回滚
-
事务管理是使用 AOP 完成的,但是如果 spring 已经提供了一个经过良好测试和使用的,为什么你还要自己动手呢?
标签: spring hibernate transactions aop spring-aop