У меня есть следующий файл JSonКак отменить изменения базы данных после ошибки при вставке большого количества записей в Mule?
[
{
"id": 1,
"name": "Ramesh",
"designation": "SE",
"salary": 25000.00
},
{
"id": 2,
"name": "Anjali",
"designation": "SE",
"salary": 20000.00
},
{
"id": 2,
"name": "Harrish",
"designation": "PM",
"salary": 120000.00
},
{
"id": 4,
"name": "Rahul",
"designation": "TA",
"salary": 150000.00
}
]
Здесь я хочу, чтобы вставить либо все записи или ни один из них. Означает, что все четыре записи будут вставлены в базу данных сотрудников или ни одна из них выше. Но здесь вы можете видеть, что третья запись имеет дубликат id 2, поскольку идентификатор второй записи содержит один и тот же идентификатор, и когда я запускаю следующее приложение mule. MySQLIntegrityConstraintViolationException
возникает ошибка, но первые 2 записи были вставлены в DB, поскольку ошибка приходит в записи без 3. Но здесь я хочу, чтобы предотвратить вставку записей или откат изменений, если все записи не вставлены в БД (означает, что любая ошибка возникает между ними).
Ниже мой мул XML файл конфигурации для вставки данных JSON в БД:
<sub-flow name="insert-fulltime-employee-details-subflow">
<dw:transform-message metadata:id="35bfe913-8de7-4b3c-9ba9-98f375a2873e" doc:name="Transform Message">
<dw:input-payload mimeType="application/json"/>
<dw:set-payload><![CDATA[%dw 1.0
%output application/java
---
payload map ((payload01 , indexOfPayload01) -> {
id: payload01.id,
name: payload01.name,
designation: payload01.designation,
salary: payload01.salary
})]]></dw:set-payload>
</dw:transform-message>
<foreach doc:name="For Each">
<db:insert config-ref="MySQL_Configuration" doc:name="Database-Insert">
<db:parameterized-query><![CDATA[insert into fulltime_employee values (#[payload.id], #[payload.name], #[payload.designation], #[payload.salary])]]></db:parameterized-query>
</db:insert>
</foreach>
<set-payload value="{"message": "All data successfully inserted into database"}" mimeType="application/json" doc:name="Set Payload"/>
</sub-flow>
Как я могу добиться этого?
Сделка транзакций не работает для меня. Он не может предотвратить вставку записей, если происходит ошибка (здесь происходит нарушение первичного ключа). – Aditya