Я создал Исходящие и после установки какого-то атрибута сохранил в репозитории. Это мой код создания и сохранения исходящих сообщений:
Outbox outbox = new Outbox();
outbox.setUserId(555);
......... // others attribute settings
......... // others attribute settings
outboxRepository.save(outbox);
outboxRepository
относится к типу OutboxRepository
, который был подключен ранее.
Это мой класс исходящих сообщений:
@Entity
@Table(name = "outbox_outbox")
@Getter
@Setter
public class Outbox implements Serializable {
@Id
private int id;
@Column(name = "created")
private Date created;
@Column(name = "modified")
private Date modified;
@Column(name = "user_id")
private int userId;
}
А это мой репозиторий:
public interface OutboxRepository extends JpaRepository<Outbox, Integer> {
}
В настоящее время интерфейс пуст. Там нет определения метода. Поскольку мне нужно только сохранить () сейчас.
Когда я запускаю код, я получаю этот журнал с исключением:
2020-02-11 08:45:30.059 DEBUG 8 --- [Thread-5] stomAnnotationTransactionAttributeSource : Adding transactional method 'save' with attribute: PROPAGATION_REQUIRED,ISOLATION_DEFAULT
2020-02-11 08:45:30.059 DEBUG 8 --- [Thread-5] o.s.orm.jpa.JpaTransactionManager : Creating new transaction with name [org.springframework.data.jpa.repository.support.SimpleJpaRepository.save]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT
2020-02-11 08:45:30.059 DEBUG 8 --- [Thread-5] o.s.orm.jpa.JpaTransactionManager : Opened new EntityManager [SessionImpl(861577479<open>)] for JPA transaction
2020-02-11 08:45:30.060 DEBUG 8 --- [Thread-5] o.h.e.t.internal.TransactionImpl : On TransactionImpl creation, JpaCompliance#isJpaTransactionComplianceEnabled == false
2020-02-11 08:45:30.060 DEBUG 8 --- [Thread-5] o.h.e.t.internal.TransactionImpl : begin
2020-02-11 08:45:30.060 DEBUG 8 --- [Thread-5] org.postgresql.jdbc.PgConnection : setAutoCommit = false
2020-02-11 08:45:30.060 DEBUG 8 --- [Thread-5] o.s.orm.jpa.JpaTransactionManager : Exposing JPA transaction as JDBC [org.springframework.orm.jpa.vendor.HibernateJpaDialect$HibernateConnectionHandle@68314f1d]
2020-02-11 08:45:30.071 DEBUG 8 --- [Thread-5] o.h.e.i.AbstractSaveEventListener : Generated identifier: 0, using strategy: org.hibernate.id.Assigned
2020-02-11 08:45:30.079 DEBUG 8 --- [Thread-5] o.s.orm.jpa.JpaTransactionManager : Initiating transaction commit
2020-02-11 08:45:30.079 DEBUG 8 --- [Thread-5] o.s.orm.jpa.JpaTransactionManager : Committing JPA transaction on EntityManager [SessionImpl(861577479<open>)]
2020-02-11 08:45:30.079 DEBUG 8 --- [Thread-5] o.h.e.t.internal.TransactionImpl : committing
2020-02-11 08:45:30.080 DEBUG 8 --- [Thread-5] o.h.e.i.AbstractFlushingEventListener : Processing flush-time cascades
2020-02-11 08:45:30.080 DEBUG 8 --- [Thread-5] o.h.e.i.AbstractFlushingEventListener : Dirty checking collections
2020-02-11 08:45:30.085 DEBUG 8 --- [Thread-5] o.h.e.i.AbstractFlushingEventListener : Flushed: 1 insertions, 0 updates, 0 deletions to 1 objects
2020-02-11 08:45:30.086 DEBUG 8 --- [Thread-5] o.h.e.i.AbstractFlushingEventListener : Flushed: 0 (re)creations, 0 updates, 0 removals to 0 collections
2020-02-11 08:45:30.087 DEBUG 8 --- [Thread-5] o.hibernate.internal.util.EntityPrinter : Listing entities:
2020-02-11 08:45:30.088 DEBUG 8 --- [Thread-5] o.hibernate.internal.util.EntityPrinter : com.smsc.core.entity.Outbox{scheduleTime=Tue Feb 11 08:45:30 UTC 2020, writeTime=Tue Feb 11 08:45:30 UTC 2020, created=Tue Feb 11 08:45:30 UTC 2020, isUnicode=1, npi=555, retryCount=555, smsCount=1, destMobileNumber=01670484066, message=testing..., userId=555, uuid=a4ef4108-e15e-4eaa-9e86-6ce411980e8b, ton=555, operatorPrefix=0, countryCode=555, dataCoding=555, modified=Tue Feb 11 08:45:30 UTC 2020, sentTime=null, sourceMobileNumber=008809612345678, id=0, inboxId=1, remarks=test remark., esmClass=555, mask=01712345678, status=PROCESSING}
2020-02-11 08:45:30.092 DEBUG 8 --- [Thread-5] org.hibernate.SQL : insert into outbox_outbox (created, modified, user_id, id) values (?, ?, ?, ?)
2020-02-11 08:45:30.110 DEBUG 8 --- [Thread-5] o.h.e.t.internal.TransactionImpl : rolling back
2020-02-11 08:45:30.118 DEBUG 8 --- [Thread-5] o.s.orm.jpa.JpaTransactionManager : Initiating transaction rollback after commit exception
org.springframework.orm.jpa.JpaSystemException: Unable to commit against JDBC Connection; nested exception is org.hibernate.TransactionException: Unable to commit against JDBC Connection
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:353) ~[spring-orm-5.2.1.RELEASE.jar!/:5.2.1.RELEASE]
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:255) ~[spring-orm-5.2.1.RELEASE.jar!/:5.2.1.RELEASE]
at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:538) ~[spring-orm-5.2.1.RELEASE.jar!/:5.2.1.RELEASE]
at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:744) [spring-tx-5.2.1.RELEASE.jar!/:5.2.1.RELEASE]
at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:712) [spring-tx-5.2.1.RELEASE.jar!/:5.2.1.RELEASE]
at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:631) [spring-tx-5.2.1.RELEASE.jar!/:5.2.1.RELEASE]
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:385) [spring-tx-5.2.1.RELEASE.jar!/:5.2.1.RELEASE]
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:99) [spring-tx-5.2.1.RELEASE.jar!/:5.2.1.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) [spring-aop-5.2.1.RELEASE.jar!/:5.2.1.RELEASE]
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:139) [spring-tx-5.2.1.RELEASE.jar!/:5.2.1.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) [spring-aop-5.2.1.RELEASE.jar!/:5.2.1.RELEASE]
at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:178) [spring-data-jpa-2.2.1.RELEASE.jar!/:2.2.1.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) [spring-aop-5.2.1.RELEASE.jar!/:5.2.1.RELEASE]
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:93) [spring-aop-5.2.1.RELEASE.jar!/:5.2.1.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) [spring-aop-5.2.1.RELEASE.jar!/:5.2.1.RELEASE]
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212) [spring-aop-5.2.1.RELEASE.jar!/:5.2.1.RELEASE]
at com.sun.proxy.$Proxy87.save(Unknown Source) [na:na]
at com.smsc.core.service.ThreadService.saveToOutboxRepository(ThreadService.java:113) [classes!/:1.0]
at com.smsc.core.service.ThreadService.completeTaskWithThisContent(ThreadService.java:105) [classes!/:1.0]
at com.smsc.core.service.ThreadService.lambda$null$1(ThreadService.java:77) [classes!/:1.0]
at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184) ~[na:1.8.0_111]
at java.util.stream.ReferencePipeline$11$1.accept(ReferencePipeline.java:373) ~[na:1.8.0_111]
at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175) ~[na:1.8.0_111]
at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374) ~[na:1.8.0_111]
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481) ~[na:1.8.0_111]
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) ~[na:1.8.0_111]
at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151) ~[na:1.8.0_111]
at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174) ~[na:1.8.0_111]
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:1.8.0_111]
at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418) ~[na:1.8.0_111]
at com.smsc.core.service.ThreadService.lambda$run$2(ThreadService.java:77) [classes!/:1.0]
at java.lang.Thread.run(Thread.java:745) ~[na:1.8.0_111]
Caused by: org.hibernate.TransactionException: Unable to commit against JDBC Connection
at org.hibernate.resource.jdbc.internal.AbstractLogicalConnectionImplementor.commit(AbstractLogicalConnectionImplementor.java:87) ~[hibernate-core-5.4.8.Final.jar!/:5.4.8.Final]
at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.commit(JdbcResourceLocalTransactionCoordinatorImpl.java:282) ~[hibernate-core-5.4.8.Final.jar!/:5.4.8.Final]
at org.hibernate.engine.transaction.internal.TransactionImpl.commit(TransactionImpl.java:101) ~[hibernate-core-5.4.8.Final.jar!/:5.4.8.Final]
at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:534) ~[spring-orm-5.2.1.RELEASE.jar!/:5.2.1.RELEASE]
... 29 common frames omitted
Caused by: org.postgresql.util.PSQLException: ERROR: insert or update on table "outbox_outbox" violates foreign key constraint "outbox_outbox_user_id_5a5390a1_fk_users_user_id"
Detail: Key (user_id)=(555) is not present in table "users_user".
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2497) ~[postgresql-42.2.8.jar!/:42.2.8]
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2233) ~[postgresql-42.2.8.jar!/:42.2.8]
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:310) ~[postgresql-42.2.8.jar!/:42.2.8]
at org.postgresql.jdbc.PgConnection.executeTransactionCommand(PgConnection.java:754) ~[postgresql-42.2.8.jar!/:42.2.8]
at org.postgresql.jdbc.PgConnection.commit(PgConnection.java:776) ~[postgresql-42.2.8.jar!/:42.2.8]
at com.zaxxer.hikari.pool.ProxyConnection.commit(ProxyConnection.java:366) ~[HikariCP-3.4.1.jar!/:na]
at com.zaxxer.hikari.pool.HikariProxyConnection.commit(HikariProxyConnection.java) ~[HikariCP-3.4.1.jar!/:na]
at org.hibernate.resource.jdbc.internal.AbstractLogicalConnectionImplementor.commit(AbstractLogicalConnectionImplementor.java:81) ~[hibernate-core-5.4.8.Final.jar!/:5.4.8.Final]
... 32 common frames omitted