hibernate保存对象时,外键约束报错

 保存对象时,关联另外一个新对象时失败

 

@Transactional

PurchaseOrder purchaseOrder = new PurchaseOrder();
baseManager.saveOrUpdate(PurchaseOrder.class.getName(), purchaseOrder);
//baseManager.getSession().flush();
....
OrderPicture newOrderPicture = new OrderPicture();
newOrderPicture.setPurchaseOrder(purchaseOrder);
baseManager.saveOrUpdate(OrderPicture.class.getName(), newOrderPicture);

保存时, 这两个对象存在唯一性约束,purchaseOrder对象在数据库中未被找到,所以关联失败,可以使用baseManager.getSession().flush();来解决,但是这两个保存不应该在同一个事务内,也可通过事务解决。

[-8097-exec-3871] o.h.engine.jdbc.spi.SqlExceptionHelper   : Cannot add or update a child row: a foreign key constraint fails (`k3-release`.`order_picture`, CONSTRAINT `FK_83811fbal501fq20lef016c8n` FOREIGN KEY (`purchase_order_id`) REFERENCES `purchase_order` (`id`))
k3_k3_1 | 2019-08-19T06:39:22.032534643Z 2019-08-19 14:39:22.032  INFO [k3,7f8196d2340c4d83,efc1d79ae950d3a2,false] 1 --- [-8097-exec-3871] o.h.e.j.b.internal.AbstractBatchImpl     : HHH000010: On release of batch it still contained JDBC statements
k3_k3_1 | 2019-08-19T06:39:22.034327686Z 2019-08-19 14:39:22.034  WARN [k3,7f8196d2340c4d83,efc1d79ae950d3a2,false] 1 --- [-8097-exec-3871] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Warning Code: 1452, SQLState: 23000
k3_k3_1 | 2019-08-19T06:39:22.034517892Z 2019-08-19 14:39:22.034  WARN [k3,7f8196d2340c4d83,efc1d79ae950d3a2,false] 1 --- [-8097-exec-3871] o.h.engine.jdbc.spi.SqlExceptionHelper   : Cannot add or update a child row: a foreign key constraint fails (`k3-release`.`order_picture`, CONSTRAINT `FK_83811fbal501fq20lef016c8n` FOREIGN KEY (`purchase_order_id`) REFERENCES `purchase_order` (`id`))
k3_k3_1 | 2019-08-19T06:39:22.042171050Z 2019-08-19 14:39:22.041 ERROR [k3,7f8196d2340c4d83,efc1d79ae950d3a2,false] 1 --- [-8097-exec-3871] c.w.m.k.c.SalesOrderPushController       : could not execute statement; SQL [n/a]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement
k3_k3_1 | 2019-08-19T06:39:22.042188427Z 
k3_k3_1 | 2019-08-19T06:39:22.042193629Z org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement
k3_k3_1 | 2019-08-19T06:39:22.042198173Z 	at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:259) ~[spring-orm-4.2.7.RELEASE.jar!/:4.2.7.RELEASE]
k3_k3_1 | 2019-08-19T06:39:22.042202637Z 	at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:222) ~[spring-orm-4.2.7.RELEASE.jar!/:4.2.7.RELEASE]
k3_k3_1 | 2019-08-19T06:39:22.042206889Z 	at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:436) ~[spring-orm-4.2.7.RELEASE.jar!/:4.2.7.RELEASE]
k3_k3_1 | 2019-08-19T06:39:22.042211073Z 	at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:59) ~[spring-tx-4.2.7.RELEASE.jar!/:4.2.7.RELEASE]
k3_k3_1 | 2019-08-19T06:39:22.042215310Z 	at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:213) ~[spring-tx-4.2.7.RELEASE.jar!/:4.2.7.RELEASE]
k3_k3_1 | 2019-08-19T06:39:22.042219798Z 	at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:147) ~[spring-tx-4.2.7.RELEASE.jar!/:4.2.7.RELEASE]
k3_k3_1 | 2019-08-19T06:39:22.042224174Z 	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) [spring-aop-4.2.7.RELEASE.jar!/:4.2.7.RELEASE]
k3_k3_1 | 2019-08-19T06:39:22.042228391Z 	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:655) [spring-aop-4.2.7.RELEASE.jar!/:4.2.7.RELEASE]
k3_k3_1 | 2019-08-19T06:39:22.042232697Z 	at com.xms.xpo.base.dao.hibernate.XdoDaoSupport$$EnhancerBySpringCGLIB$$8a7021ea.batchSaveOrUpdate(<generated>) ~[base-1.1.10.17.jar!/:1.1.10.17]

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值