Spring数据CURD存储库在保存调用中针对多个对象失败

时间:2019-02-19 10:26:37

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

我已经定义了具有整数ID的实体类ExportRecordStatus,就像其中一个属性一样。

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 [n / a];约束[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)

对此需要帮助。预先谢谢你。

1 个答案:

答案 0 :(得分:0)

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