mybatis + oracle, программа зависла при вставке - PullRequest
0 голосов
/ 20 ноября 2018

Я пишу программу с Java и myBatis. Программа застревает со следующей вставкой без сообщения об ошибке. Я проверил Oracle, и данные не были вставлены. Я не знаю, почему это так. Обычно это может быть ошибка из sql или myBatis.

id type     number(10)
id_card_no  varchar2(50)
gene_info   varchar2(2000)

Если требуется дополнительная информация, спросите об этом. Спасибо!

<insert id="addGenotype" parameterType="genotype" useGeneratedKeys="false" >
        insert into person_genotype (ID,ID_CARD_NO,GENE_INFO)
    <foreach collection="list" item="genotype" index="index" separator="UNION ALL">
        (select
        #{genotype.genotypeId},#{genotype.idCardNumber},#{genotype.geneInfo}
        FROM DUAL)
    </foreach>
</insert>

1 Ответ

0 голосов
/ 20 ноября 2018

Скорее всего, есть еще один сеанс в базе данных, который вставил строку с тем же первичным ключом, но еще не зафиксировал.Это довольно распространенный сценарий: SQL*Plus работает с некоторыми незафиксированными изменениями.

В Oracle, если две параллельные транзакции вставляют в одну таблицу строку, конфликтующую с каким-то уникальным ключом, один из них будет блокироваться до другоголибо фиксация, либо откат.

Одним из способов преодоления этого является автоматическое создание идентификаторов для строк с использованием последовательности.В этом случае каждая новая запись получит свой новый уникальный идентификатор.

...