Предложения RETURNING работают в pgAdmin, но возвращают -1 для моего кода Java - PullRequest
0 голосов
/ 22 декабря 2018

У меня есть две таблицы, в которые я пытаюсь вставить строку.Связан внешним ключом.Я использую Java 8 Postgres 9.5.4.

Я пытался использовать предложение RETURNING, которое работает в pgAdmin (значения> = 1), но при запуске с использованием моего Java-приложения.затем значение устанавливается равным -1, и выдается ошибка.

Это мой рабочий запрос для pgAdmin,

INSERT INTO counting_table (count1, cout2) 
VALUES (3, 2) RETURNING id

, который возвращает правильное значение в pgAdmin, но при вводе как,

@SqlUpdate("INSERT INTO counting_table (count1, count2) " +
            "VALUES (:count1, :count2) " +
            "RETURNING id")
    int insertCountingTable(@Bind("count1") int count1,
                            @Bind("count2")int count2);

@CreateSqlObject
@Override
public void add(Person person, int count1, int count2)
{
    try(Handle handle = jdbi.open())
    {
        PersonDao personDao = handle.attach(PersonDao.class);
        int id = personDao.insertCountingTable(count1, count2);

        personDao.insertPerson(person.getPersonId(),
                person.getName(), id);
    }
}

Когда выполняется строка

int id = personDao.insertCountingTable(count1, count2);

, идентификатор устанавливается на -1, но значение должно быть> = 1, также проверяя базу данных. Я вижу, что строка былауспешно вставлен.

1 Ответ

0 голосов
/ 27 декабря 2018

Я не мог заставить предложение RETURNING работать так, как мне хотелось, но, используя аннотацию @GetGeneratedKeys над моим запросом и удаляя строку RETURNING, я смог достичь желаемых результатов.

Мой код теперь выглядит так:

@SqlUpdate("INSERT INTO counting_table (count1, count2) " +
"VALUES (:count1, :count2)")
@GetGeneratedKeys
int insertCountingTable(@Bind("count1") int count1,
                        @Bind("count2")int count2);
...