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