急急急!!!
使用mybatis框架进行动态编写sql插入语句时报错--违反主键唯一约束。
刚接触mybatis框架,具体不太了解。。
这是程序代码: <!--新增电价信息-->
<insert id="insertPrice" parameterType="java.util.List">
insert into OCS.E_CAT_PRC (CAT_PRC_ID,PARA_VN,CAT_PRC_ABBR,CAT_PRC_NAME,PRC_CODE,ELEC_TYPE_CODE,PRC_VOLT_CODE)
<foreach collection="list" item="item" index="index" separator="union all" >
(select
 #{item.prcid,jdbcType=VARCHAR},
 #{item.pavn,jdbcType=VARCHAR},
 '0',
 #{item.name,jdbcType=VARCHAR},
 #{item.code,jdbcType=VARCHAR},
 #{item.type,jdbcType=VARCHAR},
#{item.degree,jdbcType=VARCHAR} 
     from  OCS.E_CAT_PRC
)
</foreach>
</insert>

<!--新增电价日期信息-->
<insert id="insertPavn" parameterType="java.util.List">
insert into OCS.E_BILL_PARA_VER (PARA_VN,APP_NO,PAR_BGN_DATE,PAR_END_DATE)

<foreach collection="list" item="item" index="index"
separator="union all">
(select
#{item.pavn,jdbcType=VARCHAR},
'0',
to_date(#{item.sdate,jdbcType=VARCHAR},'yyyy-MM-dd'),
to_date(#{item.fdate,jdbcType=VARCHAR},'yyyy-MM-dd')
from OCS.E_BILL_PARA_VER
)
</foreach>
</insert>其中电价信息和电价日期是两张不同的表
这是表关系这是表结构这是控制台输出错误

解决方案 »

  1.   

    item.prcid ,你这个是怎么生成的,这个是关键。   主键冲突而已,随便输出一下,调一调就解决了
      

  2.   

    <foreach collection="list" item="item" index="index"
    separator="union all">
    (select
    #{item.pavn,jdbcType=VARCHAR},
    '0',
    to_date(#{item.sdate,jdbcType=VARCHAR},'yyyy-MM-dd'),
    to_date(#{item.fdate,jdbcType=VARCHAR},'yyyy-MM-dd')
    from OCS.E_BILL_PARA_VER
    )
    </foreach>
    ----------把 from OCS.E_BILL_PARA_VER改成 from dual 
      

  3.   

    这个和mybatis无关。
    主要是foreach 中的 item.prcid这个值有重复的。 把它数据来源搞清楚