我有两个我想使用的持久性提供程序 - 我自己的JDBC方法(DBAccess)和jooq(DSLContext)。可以使用Connection和一些配置详细信息创建DSLContext和我的DBAccess。我正在尝试将项目转换为使用Guice,并且想要创建一个能够在一个事务中使用两者的DAO,例如。
class ThingDAO {
final DBAccess dbAccess;
final DSLContext dslContext;
@Inject
ThingDAO(DBAccess dbAccess, DSLContext dslContext) {
this.dbAccess = dbAccess;
this.dslContext = dslContext;
}
Thing getThingForId(int id) {
return dslContext.select().from(OBJECT)....
}
void save(Thing t) {
dbAccess.save(t);
}
Stuff joinThingToStuffTableAndGetStuff(Thing t) {
// the Stuff I get may depend on what has been saved so far, so I need
// the dslContext and dbAccess operating on the same connection
dslContext....
}
}
然后我可以按照
的方式使用@Transactional
doTheThings(int id, int[] data) {
ThingDAO dao = thingDaoProvider.get();
Thing t = dao.getThingForId(id);
t.doTheThings(data);
dao.save(t);
Stuff s = dao.joinThingToStuffTableAndGetStuff(t);
....
}
我一直在关注this guice extension for jooq,这让我觉得我想要一个UnitOfWork的东西,它从我的数据源获取连接以便提供给DBAccess和DSLContext,但我是不确定这是否正确或如何进行,即使它是。