У меня есть миграции, которые работают нормально, но после того, как миграция успешно создана в БД и загружены тестовые данные, я получаю ошибку при создании операции.
ОШИБКА: значение дублирующего ключа нарушает уникальное ограничение "users_pkey"
Подробно: ключ (id) = (1) уже существует.
Запрос из SQL журнала данных весны:
вставка в пользователей (account_non_expired, account_non_locked, credentials_non_expired , включено, пароль, имя пользователя) значения (?,?,?,?,?,?)
В процессе миграции я устанавливаю пару тестовых пользователей в таблицу, но в спящем режиме не замечаю этого и пытаюсь записать строку как первую.
Моя users
таблица:
CREATE TABLE IF NOT EXISTS users
(
id BIGSERIAL PRIMARY KEY,
username VARCHAR(255) UNIQUE NOT NULL,
password VARCHAR(255) NOT NULL,
account_non_expired BOOLEAN DEFAULT TRUE,
account_non_locked BOOLEAN DEFAULT TRUE,
credentials_non_expired BOOLEAN DEFAULT TRUE,
enabled BOOLEAN DEFAULT TRUE
);
Класс сущности:
@Data
@Entity
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "users")
@EqualsAndHashCode(exclude = "roles")
@ToString(exclude = "roles")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "username")
private String username;
@Column(name = "password")
private String password;
@Column(name = "account_non_expired")
private Boolean accountNonExpired;
@Column(name = "account_non_locked")
private Boolean accountNonLocked;
@Column(name = "credentials_non_expired")
private Boolean credentialsNonExpired;
@Column(name = "enabled")
private Boolean enabled;
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "users_roles",
joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "role_id", referencedColumnName = "id"))
private List<Role> roles;
}
На самом деле стратегия GenerationType.IDENTITY
работает с BIGSERIAL
, когда Я отправляю запросы 3 раза после прироста пребывания в нужном месте. С каждым запросом к БД Hibernate делай +1.
Это миграция данных пользователей:
INSERT INTO users (id, username, password)
VALUES (1, 'user', 'pass'),
(2, 'operator', 'pass'),
(3, 'admin', 'pass');
Как это исправить, для Hibernate можно заметить объем данных, полученных при запуске?