JdbcSQLException: нарушение уникального индекса или первичного ключа

У меня есть две таблицы: AccountData и Relations. Они имеют отношение один ко многим, одному аккаунту может принадлежать несколько отношений.

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

Caused by: org.h2.jdbc.JdbcSQLException: Unique index or primary key violation: "PRIMARY KEY ON PUBLIC.ACC_DATA(ID)"; SQL statement:
insert into ACC_DATA (ACC_CURRENCY, STATUS, CREATED_AT, CODE, ACC_NBR, OWNER_ID, EP_ID, SUBTYPE_ID, TYPE_ID, id) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) [23505-197]

Я определяю первичный ключ следующим образом:

@Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_ACC_DATA")
    @SequenceGenerator(name = "SEQ_ACC_DATA", sequenceName = "SEQ_ACC_DATA", allocationSize = 50)
    private Long id;

Есть идеи?

Спасибо заранее!


person dorcsi    schedule 05.02.2019    source источник
comment
Есть ли у вас уникальные индексы в этой таблице? Вы уже проверили, соответствует ли по какой-либо причине следующее значение последовательности в SEQ_ACC_DATA в вашей таблице?   -  person nullptr    schedule 05.02.2019
comment
нет, у меня нет, это база данных H2   -  person dorcsi    schedule 05.02.2019


Ответы (1)


Код вроде правильный.

Сравните значение последовательности SEQ_ACC_DATA в базе данных и значение Max для столбца ID таблицы ACC_DATA.

Если столбец ID имеет значение больше, чем последовательность, вам потребуется увеличить значение последовательности, чтобы новые вставки могли выполняться с помощью кода.

person Kaushik Patel    schedule 05.02.2019
comment
Я использую Spring Data JPA с Hibernate и H2 в качестве базы данных. Приложение создало свои собственные таблицы базы данных. У меня есть следующие сопоставления: @OneToMany(mappedBy = account, cascade = CascadeType.ALL, orphanRemoval = true) отношения private List‹Relations›; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = ACC_DATA_ID) private AccData accountData; - person dorcsi; 05.02.2019