У меня был также проект, где БД Oracle, которая предоставляет данные для моих классов @Entity.Как вы сказали, последовательность генерирует идентификатор PK таблицы через триггер.Это были аннотации, которые я использовал в одном из этих классов:
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "G1")
@SequenceGenerator(name = "G1", sequenceName = "LOG_SEQ")
@Column(name = "ID", unique = true, nullable = false, precision = 22, scale = 0)
public int getId() {
return this.id;
}
Это второй синтаксис, который вы показали в своем посте.В коде Java нет вызова триггера, потому что триггер управляется БД.Я помню, что мне нужно было иметь последовательность и триггер одновременно в БД, если я не хотел проблем.Триггер спрашивает, является ли идентификатор строки для вставки нулевым или = 0. В этом случае вызывается последовательность LOG_SEQ.
Таким образом, если вы предоставите значение @Id вашей сущности, оно может быть вставлено в БД (если этот Id не существует) и последовательность не будет вызвана.Попробуйте увидеть код триггера, чтобы увидеть, что именно происходит.