Search code examples
ibatismybatis

iBATIS - auto generated keys exception


I am using IBATIS 2.3.4 version. Database is MS SQL Server.

I am trying to insert record in table T_PROFILE, which has Identity primary column auto generated value.

My IBATIS configuration is

<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>

It is giving error as

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".

Solution

  • If you have identity column set in database, the below query itself will work. useGeneratedKeys not needed.

     <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>