我正在尝试为返回生成的id INSERT RETURNING id执行插入操作。在postgres编辑器中它没有问题,但在代码执行中 - 带有iBatis 3的java 1.6(8.4 postgres驱动程序版本8.4-702)给出错误 - 引起:org.postgresql.util.PSQLException:错误:语法错误在或附近“回归。“ 这意味着Postgres不支持返回插入?
我在网上发现了这个问题 - Concurrency issues when retriveing Ids of newly inserted rows with ibatis
但不怎么做
代码iBatis xml
<insert id="insertNewItem" parameterType="itemAlias" useGeneratedKeys="true" keyProperty="item_id">
INSERT INTO items (
category_id,
description,
...)
VALUES(
#{category_id},
#{description},
...)
RETURNING item_id
</insert>
答案 0 :(得分:1)
La respuesta es:
Public void insert(Item itemAlias) {
SqlSession session = sqlSessionFactory.openSession();
try {
Session.getMapper(ItemMapper.class).insert(itemAlias);
Logger.debug("itemAlias id:" + itemAlias.getItem_id()); // Here this you give you the generated key.
}
Finally {
Session.close();
}}
MyBatis xml
<insert id="insertNewItem" parameterType="itemAlias" useGeneratedKeys="true" keyProperty="item_id">
INSERT INTO items (
category_id,
description,
...)
VALUES(
#{category_id},
#{description},
...)
</insert>
MyBatis家伙帮助了我。非常感谢
答案 1 :(得分:0)
我想你在这里想念一些概念。 RETURNING既不是RETURN也不是SELECT。它只是抛出一些变量。为了使它工作,声明将看起来像这样
declare tmp integer;
INSERT INTO items (
category_id,
description,
...)
VALUES(
#{category_id},
#{description},
...)
RETURNING item_id INTO tmp
return tmp;
你可以将整数更改为主键数据类型