首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在存储库上调用save()不会插入到表中并提供org.springframework.orm.jpa.JpaSystemException

在存储库上调用save()不会插入到表中并提供org.springframework.orm.jpa.JpaSystemException
EN

Stack Overflow用户
提问于 2020-02-11 18:37:23
回答 1查看 125关注 0票数 0

我创建了一个发件箱,并在设置了一些属性后保存在存储库中。这是我的发件箱创建和保存代码:

代码语言:javascript
复制
Outbox outbox = new Outbox();
outbox.setUserId(555);
......... // others attribute settings
......... // others attribute settings
outboxRepository.save(outbox);

outboxRepository的类型是OutboxRepository,它是在早些时候自动连接的。

这是我的发件箱类:

代码语言:javascript
复制
@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;
}

这是我的存储库:

代码语言:javascript
复制
public interface OutboxRepository extends JpaRepository<Outbox, Integer> {

}

目前,接口为空。这里没有给出方法定义。因为我现在只需要save()。

当我运行代码时,我得到了这个异常日志:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-12 12:44:54

我终于明白了.有一个外键约束,比如:

代码语言:javascript
复制
 "outbox_outbox_user_id_5a5390a1_fk_users_user_id" FOREIGN KEY (user_id) REFERENCES users_user(id) DEFERRABLE INITIALLY DEFERRED

但是当我插入数据时,我插入的user_id带有一个虚拟的(测试目的),这就产生了问题。我刚刚将代码更改为预期的用户id,现在正在插入数据。谢谢你们的帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60166951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档