栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Spring Rest中的ConstraintViolationException

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring Rest中的ConstraintViolationException

TransactionSystemException的原因

  1. hibernate实体管理器负责引发所有hibernate异常

如果您进入代码AbstractEntityManagerImpl.convert()方法,您将看到默认情况下它不处理任何特定的异常(如ConstraintViolation),而是仅抛出并包装PersistenceException。

  1. 如果您在@Transaction中调用代码并将其转换为TransactionSystemException,则JPA事务管理器会捕获上述异常,您可以看到spring JPA事务管理器的代码class =“ org.springframework.orm.jpa.JpaTransactionManager”

正确解决异常的解决方案

  1. 首先注册一个JPA方言,它可以拦截那些HibernateExceptions并包装到特定的Spring异常中,例如在事务管理器bean中。
>      <bean id="transactionManager"> >>         <property name="entityManagerFactory" ref="entityManagerFactory"/>>         <property name="jpaDialect" ref="jpaDialect"/>>     </bean>>  >     <bean id="jpaDialect"> />

HibernateJpaDialect捕获这些异常并将其转换为Spring特定的异常,如下所示

>     if (ex instanceof ConstraintViolationException) {>    ConstraintViolationException jdbcEx => (ConstraintViolationException) ex;>    return new DataIntegrityViolationException(ex.getMessage()  +> "; SQL [" + jdbcEx.getSQL() +> "]; constraint [" + jdbcEx.getConstraintName() + "]",> ex);>}
  1. 您还可以注册您的entitymanager正在使用hibernatejpaVendorAdapter来确保您在任何地方都使用hibernate。
>     <bean id="entityManagerFactory"> >><property name="packagesToScan" value="com.pack.model" />>  <property name="persistenceUnitManager"> ref="persistenceUnitManager"/>>  <property name="persistenceUnitName" value="entityManager"/>>  <property name="jpaVendorAdapter" ref="jpaVendorAdapter"/>>         </bean>    <bean id="jpaVendorAdapter"> />
  1. 现在在您的控制器中,您可以期待dataIntegrityException,它是由于ConstraintViolationException而抛出的hibernate方言产生的

@ExceptionHandler(DataIntegrityViolationException.class)



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/435925.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号