Ответ 1
У меня также был проект, где Oracle DB, которая предоставляет данные моим классам @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 нет вызова триггера, потому что триггер управляется БД. Я помню, что мне приходилось иметь последовательность и триггер одновременно в БД, если я не хотел иметь проблемы. Триггер спросил, является ли id строки для вставки нулевым или = 0. В этом случае вызывается последовательность LOG_SEQ.
Итак, если вы предоставите значение @Id вашей сущности, оно может быть вставлено в БД (если этот идентификатор не существует), и последовательность не будет вызываться. Попробуйте увидеть код триггера, чтобы увидеть, что именно происходит.