#java #postgresql #spring-boot
Вопрос:
Я разрабатываю веб-приложение с использованием Spring-Boot 2 и PostgreSQL. Моя проблема в том, что разработка началась с использования MYSQL 8.0 и H2 в качестве баз данных, и у меня не было никаких проблем с ними. Из-за ограничений развертывания мне необходимо настроить базу данных PostgreSQL.
Я обнаружил, что после импорта моего сценария заполнения мое веб-приложение будет пытаться генерировать повторяющиеся идентификаторы, уже существующие из сценария, вместо того, чтобы следовать за последним идентификатором, содержащимся в базе данных.
Это мое BaseEntity.class
/**
* Simple JavaBean domain object with an id property. Used as a base class for objects
* needing this property.
*
* @author Ken Krebs
* @author Juergen Hoeller
*/
@MappedSuperclass
public class BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
protected Integer id;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public boolean isNew() {
return this.id == null;
}
}
И часть населения sql-скрипт
-- Valoraciones Usuario 1
INSERT INTO valoracion(id, puntuacion, comentario, beaver_id, author_id) VALUES (1, 4.5, 'Muy profesional, su trabajo ha sido perfecto y muy puntual.', 1, 2);
INSERT INTO valoracion(id, puntuacion, comentario, beaver_id, author_id) VALUES (2, 3.5, 'Profesional y puntual.', 1, 3);
INSERT INTO valoracion(id, puntuacion, comentario, beaver_id, author_id) VALUES (3, 2.1, 'Mucho arte, pero nada puntual con la entrega.', 1, 4);
INSERT INTO valoracion(id, puntuacion, comentario, beaver_id, author_id) VALUES (4, 1.0, 'Pésimo trabajo. Nada profesional.', 1, 5);
INSERT INTO valoracion(id, puntuacion, comentario, beaver_id, author_id) VALUES (5, 3.3, 'Puntual y barato.', 1, 6);
INSERT INTO valoracion(id, puntuacion, comentario, beaver_id, author_id) VALUES (6, 5.0, 'Su trabajo es increible, lo recomiendo.', 1, 7);
INSERT INTO valoracion(id, puntuacion, comentario, beaver_id, author_id) VALUES (7, 1.2, 'Malisimo trabajo, nada satisfecho.', 1, 8);
Комментарии:
1. Используйте последовательность как для сценария заполнения, так и для ссылки на нее вашей сущности
2. Даже не нужно ссылаться на последовательность в сущности, типе поколения. Идентификатор справится с этим, если тип первичного ключа является ПОСЛЕДОВАТЕЛЬНЫМ.
Ответ №1:
Похоже, вам нужно перезапустить последовательность идентификаторов на вашем столе.
ALTER SEQUENCE table_name_id_seq RESTART WITH 8;