Hibernate пользовательский генератор последовательности - таблица не существует - PullRequest
0 голосов
/ 20 марта 2020

Я использую собственный класс для генерации идентификатора:

public class StringPrefixedSequenceIdGenerator extends SequenceStyleGenerator

Также использую этот класс для атрибута сущности:

@Id
    @GenericGenerator(name = "pipeline_seq_generator", strategy = "com.model.StringPrefixedSequenceIdGenerator", parameters = {
            @Parameter(name = StringPrefixedSequenceIdGenerator.INCREMENT_PARAM, value = "50") })
    @GeneratedValue(generator = "pipeline_seq_generator", strategy = GenerationType.SEQUENCE)
    @Column(name = "pipeline_id", unique = true, nullable = false, length = 100)
    public String getPipelineId() {
        return this.pipelineId;
    }

Проблема в том, что hibernate все еще пытается получить последовательность из базы данных: выберите next_val в качестве id_val из pipe_seq_generator для обновления

Ошибка: java. sql .SQLSyntaxErrorException: таблица 'table.pipeline_seq_generator' не существует

РЕДАКТИРОВАТЬ: Метод генерирования @Override вызывает hibernate для вызова последовательности из базы данных, когда я передаю super.generate (сеанс, объект) в качестве параметра в моем методе:

@Override
    public Serializable generate(SharedSessionContractImplementor session,
            Object object) throws HibernateException {
        return String.format(format, LocalDate.now(), super.generate(session, object));
    }

1 Ответ

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

Я изменил реализацию метода generate, чтобы не использовать super.generate (session, object):

@Override
    public Serializable generate(SharedSessionContractImplementor session,
            Object object) throws HibernateException {
        LocalTime localTime = LocalTime.now();
        return prefix + String.format(format, LocalDate.now()) + localTime.getHour() + localTime.getMinute() + localTime.getSecond();
    }

В этой модели я использую только мою реализацию без использования базы данных последовательностей.

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