【发布时间】: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