2017-04-09 30 views
0

私は2つのテーブルOrdersとTransactionを、注文からトランザクションテーブルの外部キーorderIdとのトランザクションに1対多にマッピングします。外部キー制約が1対多で失敗する

トランザクションによっては順序がない可能性があります。この場合、orderIdは0になります。id 0の順序はありません。これは、テーブルを削除して休止状態に戻すまで動作していました。今、私が注文ID 0との取引を挿入しようとしているとき、次の例外が発生します。

org.hibernate.exception.ConstraintViolationException: could not insert: [com.fundexpert.dao.Transaction] 
     at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:94) 
     at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) 
     at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:64) 
     at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2186) 
     at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2666) 
     at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:71) 
     at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279) 
     at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:321) 
     at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204) 
     at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:130) 
     at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210) 
     at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195) 
     at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:117) 
     at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93) 
     at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:534) 
     at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:526) 
     at org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:241) 
     at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:291) 
     at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:239) 
     at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:192) 
     at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:319) 
     at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:265) 
     at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:242) 
     at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:192) 
     at org.hibernate.engine.Cascade.cascade(Cascade.java:153) 
     at org.hibernate.event.def.AbstractSaveEventListener.cascadeAfterSave(AbstractSaveEventListener.java:479) 
     at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:357) 
     at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204) 
     at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:130) 
     at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210) 
     at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56) 
     at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195) 
     at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:50) 
     at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93) 
     at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:562) 
     at org.hibernate.impl.SessionImpl.save(SessionImpl.java:550) 
     at org.hibernate.impl.SessionImpl.save(SessionImpl.java:546) 
     at com.fundexpert.controller.Store.existingUser(Store.java:408) 
     at com.fundexpert.controller.Store.sFactory(Store.java:160) 
     at com.fundexpert.servlet.upload.PdfRun.doPost(PdfRun.java:124) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:650) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
     at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:221) 
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 
     at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505) 
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169) 
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 
     at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956) 
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:436) 
     at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1078) 
     at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625) 
     at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
     at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
     at java.lang.Thread.run(Thread.java:745) 
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`fundexpert`.`transaction`, CONSTRAINT `FK7FA0D2DE80F6DF09` FOREIGN KEY (`orderId`) REFERENCES `orders` (`id`)) 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
     at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
     at com.mysql.jdbc.Util.handleNewInstance(Util.java:406) 
     at com.mysql.jdbc.Util.getInstance(Util.java:381) 
     at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1016) 
     at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957) 
     at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3376) 
     at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3308) 
     at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1837) 
     at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1961) 
     at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2543) 
     at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1737) 
     at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2022) 
     at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1940) 
     at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1925) 
     at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:105) 
     at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:94) 
     at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:57) 
     ... 59 more 
+0

コードを共有できますか –

答えて

0

あなたはそれが唯一の有効な値またはNULLにすることができます0に注文IDを設定することはできません。外来キーにNULL値を許可しない可能性があります。また、あなたが制約を削除することはできませんスキーマジェネレータを休止状態、修正を適用した後、テーブルを再作成する必要があり

@ManyToOne(optional = true) 

真=オプションのManyToOne注釈に追加する必要があります。