mybatis + oracle,程序在插入时卡住

时间:2018-11-20 05:31:55

标签: java sql oracle optimization mybatis

我正在用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 :(得分:1)

很可能数据库有另一个会话,该会话使用相同的主键插入了行,但尚未提交。让SQL*Plus运行一些未提交的更改是一种很常见的情况。

在Oracle中,如果两个并发事务插入到同一表中,则在其中一个唯一键上发生冲突的行将被阻塞,直到另一个提交或回滚为止。

克服此问题的方法之一是使用序列自动为行生成标识符。在这种情况下,每条新记录都会获得自己的全新唯一ID。