【问题标题】:Spring data CURD Repository failing for multiple objects on save callSpring数据CURD存储库在保存调用时因多个对象失败
【发布时间】:2019-02-19 10:26:36
【问题描述】:

我已经定义了实体类 ExportRecordStatus,它具有像其中一个属性一样的 Integer Id。

ExportRecordStatus 使用所有值定义,保存时会为单个实体保存,但对于多个实体会失败。

exportRecordStatusList 有以下条目:

[ExportRecordStatus 
[Id=null, runId=55801, mdmItemId=1111, endPointItemId=null, statusTime=xxxxx, endPointName=xxx, status=ERROR, detailStatus=xxxx, endPointResponseCode=null],

ExportRecordStatus
[Id=null, runId=55801, mdmItemId=2222, endPointItemId=null, statusTime=xxxx, endPointName=xxx, status=ERROR, detailStatus=xxx, endPointResponseCode=null]
]
Id being primary key.

org.springframework.dao.DataIntegrityViolationException: 不能 执行语句; SQL [不适用];约束 [null];嵌套异常是 org.hibernate.exception.ConstraintViolationException:不能 执行语句

实体被定义为带有 Id 属性的注释如下:

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "qconn_ers_id")
@SequenceGenerator(name="qconn_ers_id", sequenceName = "qconn_ers_id", allocationSize=1)
@Column(name = "ERS_ID", updatable = false, nullable = false)
pdefined Integer Id;

我已将存储库类定义如下

public interface ExportRecordStatusCRUDRepository extends CrudRepository<ExportRecordStatus, Integer> {}

在调用单个对象时,它适用于单个对象。

exportRecordStatusCRUDRepository.save(exportRecordStatus);

但如果有多个对象,它会失败并引发异常。

保存应该成功,并且每个 ExportRecordStatus 对象的 Id 应该具有唯一值。

全栈复制如下-

2019-02-19 14:23:56,244 ERROR c.i.m.c.a.p.AllExceptionsProcessor [Camel (camel-1) thread #6 - Threads] STOPPING the processing of becuase of exception  could not execute statement; SQL [n/a]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statementStackTrace  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:278)at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:244)at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:521) at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:761) at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:730) at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:504)    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:292)at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136)   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:133) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at org.springframework.data.repository.core.support.SurroundingTransactionDetectorMethodInterceptor.invoke(SurroundingTransactionDetectorMethodInterceptor.java:57) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213) at com.sun.proxy.$Proxy118.save(Unknown Source) at com.ibm.mdm.camel.adobe.processor.WriteResponseToDBProcessor.process(WriteResponseToDBProcessor.java:72) at org.apache.camel.processor.DelegateSyncProcessor.process(DelegateSyncProcessor.java:63) at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:76)at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:548) at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201) at org.apache.camel.processor.Pipeline.process(Pipeline.java:138)
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:101)
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201)at org.apache.camel.component.direct.DirectProducer.process(DirectProducer.java:62)
    at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:148)
    at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:76)at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:548)  at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201)at org.apache.camel.processor.Pipeline.process(Pipeline.java:138)
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:101)
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:138)
    at org.apache.camel.processor.Pipeline.access$100(Pipeline.java:43)
    at org.apache.camel.processor.Pipeline$1.done(Pipeline.java:157)
    at org.apache.camel.processor.ThreadsProcessor$ProcessCall.run(ThreadsProcessor.java:87)at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:522)
    at java.util.concurrent.FutureTask.run(FutureTask.java:277)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1153)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.lang.Thread.run(Thread.java:785)

在这方面需要帮助。提前谢谢你。

【问题讨论】:

  • 向我们展示完整的堆栈跟踪
  • 保存单个对象时,Id 是否与生成器有关?
  • 尝试离开@GeneratedValue(strategy=GenerationType.SEQUENCE)并删除SequenceGenerator注解
  • 您的列名是“ERS_ID”,查询显示为“Id”,可能在添加 hibernate.hbm2ddl.auto=create-drop 后会解决您的问题
  • @Maciej Kowalski :添加了可能有帮助的完整堆栈跟踪,@ Sergio Lema:我只能看到 Id 值为 null 并且它在保存调用时自动定义,是的,当有单个实体时工作正常。

标签: java spring spring-boot spring-data-jpa spring-data


【解决方案1】:

我可以解决这个问题,我绑定实体类属性和数据库的方式存在问题,有 2 个属性是用唯一约束定义的,并且不知何故我的应用程序正在为 2 条记录推送相同的时间戳,但它失败了。 感谢大家的快速投入。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-28
    • 2019-12-05
    • 2015-09-22
    • 1970-01-01
    • 2018-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多