Получение автоматически сгенерированного ключа из вставки строки в Spring 3 / PostgreSQL 8.4.9

Я хотел бы получить автоматически сгенерированный идентификатор из вставки строки, но я получаю NullPointerException

Вот код:

long result = 0;
        final String SQL = "INSERT INTO compte (prenom, nom, datenaissance, numtelephone) "
                            + " VALUES(?,?,?,?)";
        KeyHolder keyHolder = new GeneratedKeyHolder();
        int row= this.jdbcTemplate.update(new PreparedStatementCreator(){
            public PreparedStatement createPreparedStatement(Connection connection)
                throws SQLException {
                PreparedStatement ps =connection.prepareStatement(SQL);
                ps.setString(1, a.getSurname());
                ps.setString(2, a.getName());
                ps.setDate(3, a.getDob());
                ps.setString(4, a.getPhone());
                return ps;
            }
        },keyHolder);

        if (row > 0)
            result = keyHolder.getKey().longValue(); //line 72

А это таблица PostgreSQL:

CREATE TABLE compte
(
  idcompte serial NOT NULL,
  prenom character varying(25) NOT NULL,
  nom character varying(25) NOT NULL,
  datenaissance date NOT NULL,
  numtelephone character varying(15) NOT NULL,
  CONSTRAINT pk_compte PRIMARY KEY (idcompte )
);

PostgreSQL поддерживает автоматически сгенерированные ключи, но я получаю это исключение:

java.lang.NullPointerException
    at com.tante.db.JDBCUserAccountDAO.insertAccount(JDBCUserAccountDAO.java:72)

РЕДАКТИРОВАТЬ: Я попробовал это, чтобы получить автоматически сгенерированный ключ:

result = jdbcTemplate.queryForLong("select currval('compte_idcompte_seq')");

, но я получаю PSQLException:

текущее значение (currval) последовательности compte_idcompte_seq не определено в этом сеансе , хотя я подумал, что compte_idcompte_seq.NEXTVAL должен был вызываться при вставке строки

РЕДАКТИРОВАТЬ:

Значение автоинкремента правильно создается при вставке строки

Есть идеи?

44
задан Jerec TheSith 21 March 2013 в 14:39
поделиться