(我在DAO模式实现中有一个简单的CRUD API。)所有操作(保存、加载、更新、删除)都有一个必须提供的事务id。所以,例如。可以这样做:
..。
id = begintransaction();
dao.save(o, id);
sao.update(o2, id);
rollback(id);除了加载调用之外的所有示例似乎都很直观。但是,一旦您开始从数据库加载对象,事情就会“感觉”有点不同。根据定义,加载操作是否与事务相关?或者我的加载操作应该被算作单次工作量?
发布于 2009-04-03 06:41:34
取决于您正在使用的事务隔离级别(http://en.wikipedia.org/wiki/Isolation_(database_systems),但通常它们应该是事务的一部分。如果其他人正在更新您试图读取的数据,该怎么办?如果读取操作不是事务性的,那么您将获得旧数据,并且您可能对最新数据感兴趣。
发布于 2009-04-03 07:13:48
如果数据库设置为适当的隔离级别,则只能从创建它们的事务中读取未提交的写操作。例如,在Oracle中,如果一个过程插入或更新一行,然后(未提交)调用另一个过程,该过程使用“杂注autonomous_transaction”在单独的事务中运行,则该另一个过程看不到新行。(顺便说一句,这是一种搬起石头砸自己脚的好方法)。
因此,您应该始终将加载操作视为与事务相关。
https://stackoverflow.com/questions/712750
复制相似问题