Я использовал следующий код для сохранения сущности в Postgres:
@Entity
public class TwEvent {
@Id
@GeneratedValue
private Long id;
private String type;
}
@Repository
public class TwEventDAO {
@Autowired
private TwEventRepo repo;
public void save(TwEvent twEvent) {
repo.save(twEvent);
}
}
public interface TwEventRepo extends JpaRepository<TwEvent,Long>{
}
Это работало для ~ 30.000 записей, но когда я сегодня запустил свое приложение, я получил ошибку SQL:
2019-01-13 19:57:48:432 WARN http-nio-8081-exec-4 o.h.e.j.s.SqlExceptionHelper:127 - SQL Error: 0, SQLState: 23505
2019-01-13 19:57:48:432 ERROR http-nio-8081-exec-4 o.h.e.j.s.SqlExceptionHelper:129 - ERROR: duplicate key value violates unique constraint "tw_event_pkey"
Detail: Key (id)=(34) already exists.
2019-01-13 19:57:48:434 INFO http-nio-8081-exec-4 o.h.e.j.b.i.AbstractBatchImpl:193 - HHH000010: On release of batch it still contained JDBC statements
Похоже, Postgres начал генерировать идентификаторы с самого начала и игнорирует уже существующие записи. Перезапуск не помог, ни использование EntityManager.
Приложение отлично работает с новой чистой БД. Любые идеи, как исправить БД, чтобы она генерировала
правильный идентификатор?
РЕШИТЬ:
CREATE TABLE tw_event2 AS TABLE tw_event;
Затем я удалил исходную таблицу и переименовал копию в tw_event. После этого следующий идентификатор был последним + 1, как и ожидалось. Не было необходимости менять код. Понятия не имею, что вызвало эту ошибку, хотя