3.2.6.2.2. TransactionalDataManager
TransactionalDataManager
是一个中间层的 bean,跟 DataManager
接口类似,但是可以使用一个已经存在的事务。有如下功能:
如果有活跃的事务,则会使用它,否则跟
DataManager
一样会创建并提交一个新事务。接收并返回游离态的实体。开发者需要使用合适的视图加载实体并使用
save()
方法显式的保存修改的实例至数据库。使用行级安全机制,使用跟
DataManager
一样的方式处理动态属性和跨数据存储引用。
下面是在 service 的方法中使用 TransactionalDataManager
的简单示例:
@Inject
private TransactionalDataManager txDataManager;
@Transactional
public void transfer(Id<Account, UUID> acc1Id, Id<Account, UUID> acc2Id, Long amount) {
Account acc1 = txDataManager.load(acc1Id).one();
Account acc2 = txDataManager.load(acc2Id).one();
acc1.setBalance(acc1.getBalance() - amount);
acc2.setBalance(acc2.getBalance() + amount);
txDataManager.save(acc1);
txDataManager.save(acc2);
}
可以在框架测试代码中找到更复杂的例子: DataManagerTransactionalUsageTest.java
如果需要在当前事务中处理 EntityChangedEvent 事件的话, TransactionalDataManager 特别有用。可以在事务提交之前从数据库获取更改实体的当前状态。 |