Java DataIntegrityViolationException如何使用JPA进行持久化处理
我正在使用JpaRepository,JpaSpecificationExecutor将数据持久化到数据库中。我的公司不允许我们使用hibernate。我的问题是:需要一种方法来处理3 cenarios中的DataIntegrityViolationException什么是:Java DataIntegrityViolationException如何使用JPA进行持久化处理,java,spring-boot,jpa,exception,Java,Spring Boot,Jpa,Exception,我正在使用JpaRepository,JpaSpecificationExecutor将数据持久化到数据库中。我的公司不允许我们使用hibernate。我的问题是:需要一种方法来处理3 cenarios中的DataIntegrityViolationException什么是: 违反唯一密钥 尝试将空值插入到非空值的列中 尝试引用(外键)列为的表不存在。 .... 我的实际解决办法是: 我认为您应该创建ExceptionResolverService,并在此服务中定义应根据消息返回的异常,您在
- 违反唯一密钥
- 尝试将空值插入到非空值的列中
- 尝试引用(外键)列为的表不存在。 .... 我的实际解决办法是:
我认为您应该创建
ExceptionResolverService
,并在此服务中定义应根据消息返回的异常,您在何处使用此服务,最好有一个ExceptionHandler
,它还可以根据您可能返回的异常返回您想要的异常……我的问题是,对于上述所有三种情况,JPA都返回DataIntegrityViolationException。我需要定制一个用户友好的消息
catch (DataIntegrityViolationException e) {
String message = ExceptionUtils.getMessage(e.getRootCause());
log.error(message);
if (message.contains("Violation of UNIQUE KEY constraint 'UK01_grupo_ramo'"))
throw new ValidacaoException(StringUtils.getMensagem("produto.exception.grupoRamo.nrGrupoRamoDuplicado", grupoRamo.getNrGrupoRamo()));