保存对象时,关联另外一个新对象时失败
@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]