欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-02 15:23:07
...

在测试中,我们发现在一个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相关文章

上一篇: JPA学习

下一篇: 框架搭建