gpt4 book ai didi

java - 如何以编程方式获取 DAO 的 PlatformTransactionManager?

转载 作者:行者123 更新时间:2023-12-02 00:47:40 25 4
gpt4 key购买 nike

我正在使用 wicket 开发一个通用的 CRUD 应用程序,它可以使用 AbstractDao 模式的实现来编辑任何 Spring/JPA 实体,例如 UserDaoImpl 、 ForumDaoImpl ...等

在我的 Wicket 页面:我必须使用 @SpringBean 来确定要使用哪个 PlatformTransactionManager ,例如:

@SpringBean(name="transactionManagerUser")
private PlatformTransactionManager transactionManagerUser;
private TransactionTemplate txTemplate;

public CrudPage(final PageParameters pps , final AbstractDao<T> dao)
{
super(pps);
txTemplate= new TransactionTemplate(transactionManagerUser);
}

问题是,这些 DAO 使用不同的事务管理器,例如 transactionManagerUsertransactionManagerForum ...等。

我无法在代码中对这些 txManager 的名称进行硬编码。我必须以编程方式获取 dao 的 txManager 。如何实现这一目标?

非常感谢!

--------已更新--------

好吧,我通过将 PlatformTransactionManager 传递到 CRUD 页面解决了这个问题(并使用 transactionTemplate = new TransactionTemplate(platformTransactionManager) 生成 txTemplate ' ,并且它效果不错,虽然不能直接解决问题,但总之是可以的。

最佳答案

您为什么认为应该将事务逻辑放入代码中? Spring 使用方面以声明方式管理事务,因此您不必这样做。如果你认为你需要这样做,那你就错了。

交易不应该是 DAO 的职责范围;服务拥有并管理事务,因为可能有多个 DAO 参与单个事务。

我想知道为什么你需要多个事务管理器。如果您有多个数据库,则应该为每个数据库使用 XA 驱动程序,并使用单个事务管理器来处理两阶段提交。

关于java - 如何以编程方式获取 DAO 的 PlatformTransactionManager?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4478751/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com