java - jpa删除错误,同时打印更新sql

标签 java spring hibernate jpa spring-data-jpa

当我使用 JPA delete 时,出现错误。我查看日志,发现一条更新SQL,我不知道为什么执行删除,但它打印了更新SQL

java 1.8,spring-data-jpa-2.1.8

源代码:

cardApplyRepository.delete(CardApply.builder().activityId(23443L).build());

日志:

2019-07-15 13:09:20.478 [main] INFO  o.s.t.w.s.TestDispatcherServlet [initServletBean:546]     - Completed initialization in 19 ms
Hibernate: 
    insert 
    into
        t_card_apply
        (activity_id, activity_name, app_id, card_base_required_id, card_id, mass_msg_id, seller_id) 
    values
        (?, ?, ?, ?, ?, ?, ?)
2019-07-15 13:09:20.573 [main] WARN  o.h.e.j.s.SqlExceptionHelper [logExceptions:137]     - SQL Error: 1048, SQLState: 23000
2019-07-15 13:09:20.574 [main] ERROR o.h.e.j.s.SqlExceptionHelper [logExceptions:142]     - Column 'card_base_required_id' cannot be null

org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement

    at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:296)
    at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:253)
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:527)
    at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:61)
    at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:242)
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:153)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:138)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:93)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at org.springframework.data.repository.core.support.SurroundingTransactionDetectorMethodInterceptor.invoke(SurroundingTransactionDetectorMethodInterceptor.java:61)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)
    at com.sun.proxy.$Proxy206.delete(Unknown Source)
    at com.geek.icem.wechat.service.impl.WxCardServiceImplTest.deleteCard(WxCardServiceImplTest.java:34)

最佳答案

当您将实体传递给 delete 方法时,此时应该对其进行管理。

例如,使用 findById 方法并将结果传递给 delete

您在动态构建时传递一个非托管实体。

因此,要么先获取一个,要么使用 deleteById 方法。

关于java - jpa删除错误,同时打印更新sql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57033596/

相关文章:

java - 如何访问@EmbeddedId 的字段?

java - Windows 服务无法访问某些信息

java - 使用 spring bean 初始化 java.util.ArrayList

spring - 是否可以在没有客户端 key 的情况下从 Spring OAuth2 服务器获取 access_token ?

java - Hibernate Projections.property 的 JPA 替代方案

hibernate - 在 Grails 中配置 Postgres

java - 推荐一个用于 java 和 javascript 的 JSON-RPC 库

java - Android 项目中的 Junit 与响应式编程

java - 我应该以 100% 的 Jacoco 测试覆盖率为目标吗?

java - DAO 和 Hibernate 类的标准命名