2017-04-09 2 views
0

J'ai 2 tables, Commandes et Transaction avec un à plusieurs mappage des ordres aux transactions avec la clé étrangère orderId dans la table des transactions.La contrainte de clé étrangère échoue sur un à plusieurs

Il est possible que certaines transactions n'aient pas d'ordre, dans ce cas, orderId passe à 0. Il n'y a pas d'ordre avec l'identifiant 0. Cela fonctionnait jusqu'à ce que je supprime les tables et les hiberne régénérer . Maintenant, quand je suis en train d'insérer une transaction avec id ordre 0, après exception se produit:

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

Pouvez-vous partager du code? –

Répondre

0

Vous ne pouvez pas définir orderId à 0. Il ne peut être que la valeur valide ou nulle. Vous n'autorisez probablement pas les valeurs NULL dans une clé étrangère. Vous devez ajouter à l'annotation ManyToOne option = true

@ManyToOne(optional = true) 

vous avez également de recréer une table après application de la correction, mise en veille prolongée générateur de schéma ne peut pas supprimer des contraintes.