我正在用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>

最佳答案

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

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

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

10-05 22:07