0
比如我有以下类调用存储库或服务层上的flush()?
@Repository
public class JpaUserRepository implements UserRepository {
...
public void create(User user) {
entityManager.persist(user);
}
}
@Trensactional
public class UserServiceImpl implements UserService {
...
public void register(User user) {
try {
repository.create(user);
} catch (DataIntegrityViolationException ex) {
throw new UserAlreadyExistException(user);
}
}
}
有这种方法的一个问题。 Jpa不会抛出任何异常,直到交易被提交或调用EntityManager#flush()
。
我有两个解决方案。首先是将一个flush()方法添加到UserRepository接口,并在调用repository.create(user)
的UserServiceImpl#create
方法后调用repository.flush()
。第二种是在entityManager.persist(user)
的JpaUserRepository#create
方法中调用entityManager.flush()
并在UserRepository接口上记录它。
第一个解决方案不太灵活,因为UserRepository的另一个实现可能不使用指令缓存,但必须实现flush()方法。但正如我所知,Spring Data的JpaRepository使用它。从灵活性的角度来看,在这种情况下哪种方法最好?