并发数据访问控制与非事务性数据访问
1. 并发访问控制
1.1 乐观并发控制示例
在拍卖系统中,当用户进行投标操作时,需要对并发访问进行控制,以确保数据的一致性。以下是一个示例代码:
try {
Bid newBid = new Bid(
new BigDecimal("44.44"),
item,
highestBid
);
em.persist(newBid);
} catch (InvalidBidException ex) {
}
tx.commit();
em.close();
在这个代码中,我们尝试创建一个新的投标对象 newBid
,并将其持久化到数据库中。如果投标金额无效,会捕获 InvalidBidException
异常。最后提交事务并关闭实体管理器。
1.2 乐观并发控制的特点
-
find()
方法的OPTIMISTIC_FORCE_INCREMENT
模式 :该模式会在加载Item
实例后,即使在工作单元中未对其进行修改,也会增加其版本号。 - 投标操作 :持久化新的
Bid
实例不会影响Item
实例的值,而是在BID <