使用Postgres 8.4发出返回id

时间:2010-12-07 19:39:14

标签: java postgresql ibatis

我正在尝试为返回生成的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>

2 个答案:

答案 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;

你可以将整数更改为主键数据类型