Я создал триггер, чтобы идентификаторы объектов были автоматически генерированы с последовательностью каждый раз, когда они были вставлены в мою базу данных Oracle.
Проблема связана с аннотированием этих объектов для Hibernate/JPA: мне нужно определить аннотацию @GeneratedValue
но я не хочу указывать имя последовательности - это сделает Hibernate сначала запросить последовательность, а затем вставить, что является работой это уже сделано с помощью триггера.
Есть ли способ пропустить эту последовательность в @GeneratedValue со сценарием, который я предложил?
Исключение получается, если id не указан:
org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save(): Pattern
Класс шаблона:
@Entity
@Table(name = "PATTERN")
public class Patron extends HistoricoAbstractEntity {
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
@Column(name = "ID_PATTERN")
private Integer idPattern;
@Column
private String description;
@Column(name = "NEGATIVE")
private Boolean isNegative;
@Column(name = "type")
private Integer type;
@Column(name = "N_DAYS")
private Integer numDays;
... (getters & setters)
}
Из вашего кода, что я могу вам сказать, это то, что он не связан с @GeneratedValue, он указывает, что спящий режим несет ответственность за создание и идентификатор для вашего объекта. В вашем случае вы генерируете идентификатор самостоятельно, поэтому вам нужно вручную установить идентификатор для этого конкретного объекта. Тогда вы больше не получите эту ошибку, а другую вещь, которую вы можете попробовать, - это использование @PrePersist, чтобы аннотировать метод с этим и попытаться присвоить ему значение id. Я не пробовал это, но это должно работать в соответствии с этим ответом на SO.
Назначить пользовательский идентификатор
Если ваш идентификатор создается базой данных, вы должны использовать @GeneratedValue (strategy = GenerationType.AUTO) в своем поле id вместе с аннотацией @Id.
save
.