Когда я вставляю sql с внешними ключами через wso2, он блокируется - PullRequest
0 голосов
/ 03 февраля 2020

У меня возникает следующая ошибка, когда мне приходится вставлять две таблицы, связанные с внешним ключом:

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`shop_db`.`PRODUCTO_PEDIDO`, CONSTRAINT `PRODUCTO_PEDIDO_ibfk_1` FOREIGN KEY (`PEDIDO`) REFERENCES `PEDIDO` (`ID`))

Это мои таблицы:

графические таблицы

А это мой код:

<api xmlns="http://ws.apache.org/ns/synapse" name="GestionFastFoodAPI" context="/fastfood">
   <resource methods="POST" url-mapping="/insertarPedido">
      <inSequence>
         <property name="MessageID" expression="get-property('MessageID')" type="STRING"/>
         <property name="uri.var.uuid" expression="fn:substring-after(get-property('MessageID'),'uuid:')"/>
         <clone continueParent="true" sequential="true">
            <target>
               <sequence>
                  <dbreport>
                     <connection>
                        <pool>
                           <driver>com.mysql.jdbc.Driver</driver>
                           <url>jdbc:mysql://172.28.1.1:3306/shop_db</url>
                           <user>shop_db_user</user>
                           <password>shop_db_pass</password>
                        </pool>
                     </connection>
                     <statement>
                        <sql>INSERT INTO shop_db.PEDIDO (ID,USER,EMAIL,STATE) VALUES (?,?,?,"Solicitado")</sql>
                        <parameter xmlns:m0="http://services.samples/xsd" expression="fn:substring-after(get-property('MessageID'),'uuid:')" type="VARCHAR"/>
                        <parameter xmlns:m0="http://services.samples/xsd" expression="//EMAIL" type="VARCHAR"/>
                        <parameter xmlns:m0="http://services.samples/xsd" expression="//USER" type="VARCHAR"/>
                     </statement>
                  </dbreport>
               </sequence>
            </target>
            <target>
               <sequence>
                  <iterate xmlns:m0="http://services.samples" expression="//PEDIDOS">
                     <target>
                        <sequence>
                           <payloadFactory media-type="json">
                              <format>{"PEDIDO":"$1","PRODUCTO":$2,"CANTIDAD":$3}</format>
                              <args>
                                 <arg evaluator="xml" expression="fn:substring-after(get-property('MessageID'),'uuid:')"/>
                                 <arg evaluator="xml" expression="//PEDIDOS/PRODUCTO"/>
                                 <arg evaluator="xml" expression="//PEDIDOS/CANTIDAD"/>
                              </args>
                           </payloadFactory>
                           <header name="Action" value="urn:insertarprodpedido"/>
                           <send>
                              <endpoint>
                                 <http method="POST" uri-template="http://172.28.1.3:8280/fastfood/insertarProdPedido"/>
                              </endpoint>
                           </send>
                        </sequence>
                     </target>
                  </iterate>
               </sequence>
            </target>
         </clone>
      </inSequence>
      <outSequence>
         <send/>
      </outSequence>
      <faultSequence/>
   </resource>
   <resource methods="POST" url-mapping="/insertarProdPedido">
      <inSequence>
         <payloadFactory media-type="json">
            <format>{"_postinsertarprodpedido":{"PEDIDO":"$1","PRODUCTO":$2,"CANTIDAD":$3}}</format>
            <args>
               <arg evaluator="xml" expression="//PEDIDO"/>
               <arg evaluator="xml" expression="//PRODUCTO"/>
               <arg evaluator="xml" expression="//CANTIDAD"/>
            </args>
         </payloadFactory>
         <send>
            <endpoint>
               <address uri="http://sandbox-wso2-ei:8280/services/data_food_db"/>
            </endpoint>
         </send>
      </inSequence>
      <outSequence>
         <send/>
      </outSequence>
      <faultSequence/>
   </resource>
</api>

В ресурсе "/ insertarPedido" я пытаюсь записать запись сначала в таблицу Orders, а затем в таблицу order_product. Когда я пишу в запрошенном продукте, он выдает ошибку внешнего ключа.

Мне нужно записать в обе таблицы один и тот же ресурс. Спасибо за помощь

...