Сгенерированный идентификатор последовательности (из DB Sequence) в Spring при загрузке с JPA используется другим сервером / экземпляром и вызывает нарушение уникального ограничения - PullRequest
0 голосов
/ 07 февраля 2020

Мы разрабатываем новый сервис API для ключевых модулей в приложении и используем Spring boot и JPA. Здесь нам нужна ваша поддержка, поскольку мы сталкиваемся с одной проблемой, касающейся последовательности, сгенерированной каркасом JPA. Идентификатор сгенерированной последовательности совместно используется другим сервером / экземпляром параллельно и нарушая уникальное ограничение

Не могли бы вы предоставить какое-либо предложение по этому вопросу, чтобы найти причину этого root, и ниже приведены аннотации, которые мы использовали при определении сущности.

Используются аннотации

@Id
@SequenceGenerator(name = "POT_PO_HEADER_S1", sequenceName = "POT_PO_HEADER_S1", allocationSize=1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "POT_PO_HEADER_S1")
@Column(name="POH_ID", unique=true, nullable=false, precision=22)
private Long pohId;

И журнал

 select
        pot_po_header_s1.nextval 
    from
        dual
2020-Feb-06 11:18:30.808 DEBUG [http-nio-8060-exec-1] o.h.i.e.SequenceStructure - Sequence value obtained: 14021954

 2020-Feb-06 11:18:32.019 DEBUG [http-nio-8060-exec-1] o.hibernate.SQL - 
    insert 
    into
        pot_po_header
        (dept_code, dist_center, po_number, pot_cust_id, source_id, source_table, create_user, modify_user, create_user_name, modify_user_name, poh_id) 
    values
        (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
2020-Feb-06 11:18:32.673 DEBUG [http-nio-8060-exec-1] o.h.e.j.s.SqlExceptionHelper - could not execute statement [n/a]
java.sql.SQLIntegrityConstraintViolationException: ORA-00001: unique constraint (TNT_OWNER.POT_PO_HEADER_PK) violated

1 Ответ

0 голосов
/ 07 февраля 2020

Я не уверен, как вы получите свой идентификатор последовательности, который был напечатан, как показано ниже в ваших журналах

2020-Feb-06 11:18:30.808 DEBUG [http-nio-8060-exec-1] o.h.i.e.SequenceStructure - Sequence value obtained: 14021954

Вы получите значение последовательности, как только сохраните свою сущность, как показано ниже

Entityr e = epository.save(entity); тогда вы можете получить автоматически сгенерированное значение для pohId как e.getPohId

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...