|
锁定老贴子 主题:ibatis selectKey用法问题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2007-09-05
今天在用ibatis selectKey 生成 oracle sequence 的时候 发现一个问题。
其实就是相为SHIPMENT_HISTORY表加入一个主键sequence id shipmentHistoryId,加入一条记录,然后返回这个sequence id xml 代码
并且这段statement是由Abator自动生成的,蛮以为肯定不会出错的 。 但是这个 statement在运行的时候报错了 ,说不能插入 能null数值插入到SHIPMENT_HISTORY表中 ,说明这个selectKey就根本没有发挥出作用 。 查找了一下ibatis的中文文档 ,上面由下面的说明如下 : 很多数据库支持自动生成主键的数据类型。不过这通常(并不总是)是个私有的特性。SQL Map通过
xml 代码
也就是说对于oracle来说,<selectKey> statement是必须前置的,并且 必须把sequence id放到insert into 句子中,就会没有问题的。按照上面的更改我自己的xml如下,果然没有问题了
所以对于不同的数据库来说 。selectKey> 的用法可能是不一样的,网上的由很多资料的解释是根据不同的数据库的驱动,然后selectKey> 的用法也不一样。但是即使你用Abator来是生成,并且在Abator的配置文件中的 表示这个一个OracleDriver的驱动,但是Abator不会的根据不同的驱动然后生成不同的selectKey> 语句,所以说你如果用到oracle的时候,只能手工的改动这个statement了。
其实也可以用在insert语句中直接调用SEQUENCE.nextVal的方法来生成sequence id,例如
Object newKey = getSqlMapClientTemplate().insert( 同时得到newKey这个sequence 总之,相对来说,selectKey>还是比较好用的,只要你注意你用的数据库的问题(再说,ibatis也没有屏蔽掉数据库之间的差异) 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
浏览 1337 次


