@GeneratedValue в Oracle без последовательности

1

Я создал триггер, чтобы идентификаторы объектов были автоматически генерированы с последовательностью каждый раз, когда они были вставлены в мою базу данных 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)

    }
  • 0
    Скажите, пожалуйста, для чего нужно использовать @GeneratedValue, если вы уже генерируете идентификатор, используя свою реализацию.
  • 0
    Если я не указываю идентификатор, Hibernate говорит мне, что я не могу использовать метод save .
Показать ещё 5 комментариев
Теги:
hibernate
jpa

1 ответ

0

Из вашего кода, что я могу вам сказать, это то, что он не связан с @GeneratedValue, он указывает, что спящий режим несет ответственность за создание и идентификатор для вашего объекта. В вашем случае вы генерируете идентификатор самостоятельно, поэтому вам нужно вручную установить идентификатор для этого конкретного объекта. Тогда вы больше не получите эту ошибку, а другую вещь, которую вы можете попробовать, - это использование @PrePersist, чтобы аннотировать метод с этим и попытаться присвоить ему значение id. Я не пробовал это, но это должно работать в соответствии с этим ответом на SO.

Назначить пользовательский идентификатор

Если ваш идентификатор создается базой данных, вы должны использовать @GeneratedValue (strategy = GenerationType.AUTO) в своем поле id вместе с аннотацией @Id.

  • 0
    Я не могу назначить идентификатор, это новая личность. Назначение идентификатора выполняется в самой базе данных, поэтому я не могу знать идентификатор, пока объект не будет сохранен.
  • 0
    Я обновил свой ответ, попробуйте.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню