【问题标题】:iBATIS - auto generated keys exceptioniBATIS - 自动生成的密钥异常
【发布时间】:2013-02-08 05:10:26
【问题描述】:

我使用的是 IBATIS 2.3.4 版本。 数据库是 MS SQL Server。

我正在尝试在表 T_PROFILE 中插入记录,该表具有 Identity 主列自动生成的值。

我的 IBATIS 配置是

<insert id="insertProfile" parameterClass="profileDO" useGeneratedKeys="true" keyProperty="profileId">
        INSERT INTO T_PROFILE (E_ID,PROFILE_NAME,DEFAULT_PROFILE)
        VALUES(#eId#, #profileName#, #isDefaultProfile#)

        <selectKey resultClass="java.lang.Long" keyProperty="profileId" >
            SELECT @@IDENTITY AS profileId
        </selectKey>
    </insert>

报错

Caused by: com.ibatis.common.xml.NodeletException: Error parsing XML.  Cause: org.xml.sax.SAXParseException: Attribute "useGeneratedKeys" must be declared for element type "settings".
    at com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:62)
    at com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser.parse(SqlMapConfigParser.java:62)
    at com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser.parse(SqlMapConfigParser.java:55)
    at org.springframework.orm.ibatis.SqlMapClientFactoryBean.buildSqlMapClient(SqlMapClientFactoryBean.java:339)
    ... 160 more
Caused by: org.xml.sax.SAXParseException: Attribute "useGeneratedKeys" must be declared for element type "settings".

【问题讨论】:

    标签: ibatis mybatis


    【解决方案1】:

    如果您在数据库中设置了标识列,则以下查询本身将起作用。不需要 useGeneratedKeys。

     <insert id="insertProfile" parameterClass="profileDO" >
        INSERT INTO T_PROFILE (E_ID,PROFILE_NAME,DEFAULT_PROFILE)
        VALUES(#eId#, #profileName#, #isDefaultProfile#)
    
        <selectKey resultClass="long" keyProperty="profileId" >
            SELECT @@IDENTITY AS profileId
        </selectKey>
    </insert>
    

    【讨论】:

      猜你喜欢
      • 2013-05-28
      • 1970-01-01
      • 2014-08-26
      • 2011-09-27
      • 1970-01-01
      • 2018-06-03
      • 2015-11-20
      • 2016-03-07
      • 2017-08-22
      相关资源
      最近更新 更多