Java for Web学习笔记(一三八)篇外之数据库的ACID和JPA(2)JPA

在测试中,我们发现在一个JPA事务中:

  • Spring Data的写SQL是在最后commit前发出,这最大程度地缩短了写操作和commit之间的时间。
  • 对相同的ID的读,JPA只从数据库中读取一次。
  • 从数据库中获取entity,修改entity的数据,即使最后没有执行save,在commit之前,发送update。

下面是其中一个测试小例子:

@Transactional
public void acidTest() {
	TestAcidEntity entity1 = testAcidRepository.findOne(1L);
	sleep(2);
	entity1.setScore(entity1.getScore() + 1);
	testAcidRepository.save(entity1);
		

	sleep(4);		
	TestAcidEntity entity2 = testAcidRepository.findOne(2L);
	entity2.setScore(entity2.getScore() + 10);
	sleep(2);
	testAcidRepository.save(entity2); //可以将此注释掉,观察是否有update消息
}

private void sleep(int secs) {
	try {
		Thread.sleep(secs * 1000);
	} catch (InterruptedException e) {
	}
}

通过网络抓包(将jdbc连接参数加上useSSL=false)进行观察:

代码顺序:select1 → 2秒 → update1 → 4秒 → select2 → 2秒 → update2 → commit
网络抓包显示的SQL顺序 :select1 → 6秒 → select2 → 2秒 → update1 → update2 → commit

相关链接:我的Professional Java for Web Applications相关文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值