Ошибка возврата идентификатора с Postgres 8.4 - PullRequest
0 голосов
/ 07 декабря 2010

Я пытаюсь сделать вставку для возвращаемого сгенерированного идентификатора INSERT RETURNING id.В редакторе postgres он работает без проблем, но при выполнении кода - Java 1.6 с iBatis 3 (версия драйвера 8.4-702 для 8.4 postgres) выдает ошибку.ВОЗВРАТ. "Это означает, что Postgres не поддерживает Возврат для вставки?

Я нашел это в Интернете - Проблемы параллелизма при получении идентификаторов вновь вставленных строк с 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 ]

1 голос
/ 08 декабря 2010

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 помогли мне.Большое спасибо

0 голосов
/ 07 декабря 2010

Думаю, вы пропустили какую-то концепцию здесь.ВОЗВРАТ не является ни ВОЗВРАЩЕНИЕМ, ни ВЫБОРОМ.это просто выбросить некоторую переменную.Чтобы это работало, выражение будет выглядеть так

declare tmp integer;

INSERT INTO items (
        category_id,
        description,
        ...)
    VALUES(
        #{category_id},
        #{description},
        ...)    
    RETURNING item_id INTO tmp

return tmp;

вы можете изменить целое число на тип данных вашего первичного ключа

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...