well if you situation is not too complex you could just make this a substituted property.
<sqlMap namespace="selectKeys"> UPDATE ... <selectKey id="product" resultClass="int" execute="after"> ${myKeyLookupStatement} </selectKey> </sqlMap> I realize this isn't ideal. However, we are planning support for jdbc 3 generated key functionality. Therefore, it would be redundant to expand on the select key and eventually outdated. Brandon On Thu, 10 Mar 2005 16:17:04 -0500, Paul Barry <[EMAIL PROTECTED]> wrote: > As anyone tried to come up with a portable seleckKey strategy for > iBATIS? I would love to be able to easily switch between HsqlDB, MySQL, > PostgreSQL, and Oracle, but you have those pesky selectKey statements > that are very specific to the target database. If you could have the > selectKey statement refer to somewhere else based on namespace, say like > this: > > <insert id="insertProduct" parameterClass="com.domain.Product"> > <selectKey statement="selectKeys.product" keyProperty="id" /> > insert into PRODUCT (PRD_ID,PRD_DESCRIPTION) > values (#id#,#description#) > </insert> > > Then you could have this sqlmap: > > <sqlMap namespace="selectKeys"> > <selectKey id="product" resultClass="int"> > SELECT STOCKIDSEQUENCE.NEXTVAL AS ID FROM DUAL > </selectKey> > </sqlMap> > > Then in your sqlMap-config.xml you would have this: > > <sqlMapConfig> > > <sqlMap resource="sqlmaps/oracle/selectKeys.xml" /> > <sqlMap resource="sqlmaps/product.xml" /> > > </sqlMapConfig> > > Which you could easily switch to "sqlmap/mysql/selectKeys.xml" and then > everything would work the same. The only other problem is that MSSQL > and MySql need to go after the query and Oracle & PostgreSQL have to go > before the query. But you could fix that by adding another property in > the selectKey definition, like this: > > <sqlMap namespace="selectKeys"> > <selectKey id="product" resultClass="int" execute="before"> > SELECT STOCKIDSEQUENCE.NEXTVAL AS ID FROM DUAL > </selectKey> > </sqlMap> > > And MSSQL would be: > > <sqlMap namespace="selectKeys"> > <selectKey id="product" resultClass="int" execute="after"> > SELECT @@IDENTITY AS ID > </selectKey> > </sqlMap> >