当我尝试合并一个实体时,我正面临下一个问题。
我有一个课程菜单(一对多) - >类别(一对多) - >商品协会。
如果我首先坚持使用空类别和商品列表的菜单,则菜单会保持正确。
现在,如果我将当前保存菜单与一个类别合并并清空商品列表,则类别保存正常,即使我将新商品添加到空白商品列表中也是如此。
现在,如果我在商品列表中添加第二个商品,我会遇到此错误:
菜单[menuId = 1,menu_name = dsad,menu_description = null, categories = [Category [category_id = 1,categoryName = a,goods = [GoodsImp [id = 1,brand = asd,createdDate = Mon Jan 22 18:26:35 ART 2018],价格 = 3.0,description = asd,type = product]],GoodsImp [id = null,brand = dsad,createdDate = null],price = 33333.0,description = sd,type = 产品]]]],类别[category_id = 2,categoryName = b,goods = []]], 业务= 2]
-------------- Hibernate:
/* load models.menu.Menu */ select menu0_.MENU_ID as MENU_ID1_7_1_, menu0_.BUSINESS_ID as BUSINESS2_7_1_, menu0_.MENU_DESCRIPTION as MENU_DES3_7_1_, menu0_.MENU_NAME as MENU_NAM4_7_1_, categories1_.Menu_MENU_ID as Menu_MEN1_8_3_, category2_.CATEGORY_ID as categori2_8_3_, category2_.CATEGORY_ID as CATEGORY1_2_0_, category2_.CATEGORY_NAME as CATEGORY2_2_0_ from MENUES menu0_ left outer join MENUES_CATEGORIES categories1_ on menu0_.MENU_ID=categories1_.Menu_MENU_ID left outer join Categories category2_ on categories1_.categories_CATEGORY_ID=category2_.CATEGORY_ID where menu0_.MENU_ID=? Hibernate: /* load models.menu.Product */ select product0_.GOODS_ID as GOODS_ID2_6_0_, product0_.GOODS_BRAND as GOODS_BR3_6_0_, product0_.GOODS_CREATED as GOODS_CR4_6_0_, product0_.GOODS_DESCRIPTION as GOODS_DE5_6_0_, product0_.GOODS_IMAGE as GOODS_IM6_6_0_, product0_.GOODS_PRICE as GOODS_PR7_6_0_ from GOODS product0_ where product0_.GOODS_ID=? and product0_.DTYPE='PRODUCT'
休眠:
/* insert models.menu.Product */ insert into GOODS (GOODS_BRAND, GOODS_CREATED, GOODS_DESCRIPTION, GOODS_IMAGE, GOODS_PRICE, DTYPE) values (?, ?, ?, ?, ?, 'PRODUCT') Hibernate: select goods0_.GOODS_ID as GOODS_ID2_6_0_, goods0_.GOODS_ID as GOODS_ID2_6_1_, goods0_.GOODS_BRAND as GOODS_BR3_6_1_, goods0_.GOODS_CREATED as GOODS_CR4_6_1_, goods0_.GOODS_DESCRIPTION as GOODS_DE5_6_1_, goods0_.GOODS_IMAGE as GOODS_IM6_6_1_, goods0_.GOODS_PRICE as GOODS_PR7_6_1_, goods0_.GOODS_PRICE_TYPE as GOODS_PR8_6_1_, goods0_.DTYPE as DTYPE1_6_1_ from GOODS goods0_ where goods0_.GOODS_ID=? Hibernate: select goods0_.GOODS_ID as GOODS_ID2_6_0_, goods0_.GOODS_ID as GOODS_ID2_6_1_, goods0_.GOODS_BRAND as GOODS_BR3_6_1_, goods0_.GOODS_CREATED as GOODS_CR4_6_1_, goods0_.GOODS_DESCRIPTION as GOODS_DE5_6_1_, goods0_.GOODS_IMAGE as GOODS_IM6_6_1_, goods0_.GOODS_PRICE as GOODS_PR7_6_1_, goods0_.GOODS_PRICE_TYPE as GOODS_PR8_6_1_, goods0_.DTYPE as DTYPE1_6_1_ from GOODS goods0_ where goods0_.GOODS_ID=? Hibernate: /* update models.menu.Product */ update GOODS set GOODS_BRAND=?, GOODS_CREATED=?, GOODS_DESCRIPTION=?, GOODS_IMAGE=?, GOODS_PRICE=? where GOODS_ID=? Hibernate: /* create one-to-many row models.menu.Category.goods */ update GOODS set GOODS_ID=? where GOODS_ID=? [warn] o.h.e.j.s.SqlExceptionHelper - SQL Error: 1062, SQLState: 23000 [error] o.h.e.j.s.SqlExceptionHelper - Duplicate
条目' 1'关键' PRIMARY' [错误]申请 -
! @ 76lfn933p - 内部服务器错误,(PUT)[/ menu] - >
play.api.http.HttpErrorHandlerExceptions $$ anon $ 1:执行 例外[PersistenceException下: org.hibernate.exception.ConstraintViolationException:不能 执行声明]] at play.api.http.HttpErrorHandlerExceptions $ .throwableToUsefulException(HttpErrorHandler.scala:255) at play.api.http.DefaultHttpErrorHandler.onServerError(HttpErrorHandler.scala:182) at play.filters.cors.AbstractCORSPolicy $$ anonfun $ 1.applyOrElse(AbstractCORSPolicy.scala:155) at play.filters.cors.AbstractCORSPolicy $$ anonfun $ 1.applyOrElse(AbstractCORSPolicy.scala:153) 在scala.concurrent.Future。$ anonfun $ recoverWith $ 1(Future.scala:412) 在scala.concurrent.impl.Promise。$ anonfun $ transformWith $ 1(Promise.scala:37) 在scala.concurrent.impl.CallbackRunnable.run(Promise.scala:60) at play.api.libs.streams.Execution $ trampoline $ .execute(Execution.scala:70) 在scala.concurrent.impl.CallbackRunnable.executeWithValue(Promise.scala:68) 在scala.concurrent.impl.Promise $ DefaultPromise。$ anonfun $ tryComplete $ 1(Promise.scala:284) 引起:javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException:不能 执行声明 在org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:149) 在org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:157) 在org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:164) 在org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1443) 在org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1423) 在repository.JPAMenuesRepository.lambda $ updateMenu $ 2(JPAMenuesRepository.java:46) at play.db.jpa.DefaultJPAApi.lambda $ withTransaction $ 3(DefaultJPAApi.java:197) at play.db.jpa.DefaultJPAApi.withTransaction(DefaultJPAApi.java:138) at play.db.jpa.DefaultJPAApi.withTransaction(DefaultJPAApi.java:196) at play.db.jpa.DefaultJPAApi.withTransaction(DefaultJPAApi.java:169) 引起:org.hibernate.exception.ConstraintViolationException:可以 不执行声明 在org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:59) 在org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42) 在org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:111) at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:97) at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:178) 在org.hibernate.engine.jdbc.batch.internal.NonBatchingBatch.addToBatch(NonBatchingBatch.java:45) 在org.hibernate.persister.collection.AbstractCollectionPersister.insertRows(AbstractCollectionPersister.java:1567) 在org.hibernate.persister.collection.OneToManyPersister.insertRows(OneToManyPersister.java:193) 在org.hibernate.action.internal.CollectionUpdateAction.execute(CollectionUpdateAction.java:85) 在org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:589) 引起: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: 重复录入' 1'关键' PRIMARY' at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown 资源) at java.lang.reflect.Constructor.newInstance(Unknown Source) 在com.mysql.jdbc.Util.handleNewInstance(Util.java:425) 在com.mysql.jdbc.Util.getInstance(Util.java:408) 在com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936) 在com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973) 在com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909) 在com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527)
答案 0 :(得分:0)
我可以解决它。
问题是,One to Many的关系有@JoinColumn而不是@JoinTable。这是你编写几个小时的问题,你只是看不到明显的问题。
感谢所有人。