
问题分析:并发插入导致的DataIntegrityViolationException
考虑以下业务场景:一个服务方法getNumber负责根据复合键获取一个数字对象。如果该数字对象不存在,则创建一个新的;如果存在,则更新其值。该服务方法被@Transactional(Transactional.TxType.REQUIRES_NEW)注解,以确保每次调用都在一个独立的事务中执行。仓储接口EDocumentNumberRepository中,findOneForUpdate方法被@Lock(LockModeType.PESSIMISTIC_WRITE)注解,意图在查询时对现有实体加悲观写锁。
// MyService.java
@Transactional(Transactional.TxType.REQUIRES_NEW)
public class MyService {
private EDocumentNumberRepository numberRepository; // 假设已注入










