我正在使用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".
答案 0 :(得分:2)
如果您在数据库中设置了标识列,则以下查询本身将起作用。 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>