Генератор кода JOOQ для PK H2 AUTO_INCREMENT с japAnnotations на

Я пытаюсь заставить генератор кода jooq работать со следующими параметрами

<generate>
    <pojos>true</pojos>
    <jpaAnnotations>true</jpaAnnotations>
</generate>

для стола:

CREATE TABLE PUBLIC.MSG_LOG (
  ID             BIGINT AUTO_INCREMENT PRIMARY KEY,
  IN_DATASOURCE  VARCHAR(63),
  OUT_DATASOURCE VARCHAR(63),
  MSG            VARCHAR(255),
  TIMESTAMP      TIMESTAMP NOT NULL
);

Когда я запускаю код ниже

MsgLogRecord msgLog = dslContext.newRecord(MsgLog.MSG_LOG);
msgLog.setInDatasource(inputSource);
msgLog.setOutDatasource(outputSource);
msgLog.setMsg(Joiner.on("").skipNulls().join(message));
msgLog.setTimestamp(Timestamp.valueOf(LocalDateTime.now()));
msgLog.store();

он выдает ошибку с жалобой на то, что идентификатор равен нулю, но тот же код работает, если я просто удаляю <jpaAnnotations>true</jpaAnnotations> из конфигурации генератора jooq. Когда я смотрю на сгенерированные классы, кажется, что в классе MsgLogRecord отсутствует аннотация @Generated,

/**
 * Getter for <code>PUBLIC.MSG_LOG.ID</code>.
 */
@Id
@Column(name = "ID", unique = true, nullable = false, precision = 19)
public Long getId() {
    return (Long) getValue(0);
}

Может ли кто-нибудь предложить решение для этого?


person John    schedule 08.12.2015    source источник
comment
Похоже, вы уже нашли решение своей проблемы - хороший улов! Вы знаете, что можете ответить на свои вопросы о переполнении стека? Таким образом, будущие посетители, у которых возникнет такая же проблема, легко найдут решение в качестве ответа ...   -  person Lukas Eder    schedule 08.12.2015
comment
Благодарность! Я добавил ответ, если кто-то еще столкнется с той же проблемой   -  person John    schedule 09.12.2015
comment
Отлично, спасибо, что задокументировали это, Джон. Это обязательно будет полезно для других   -  person Lukas Eder    schedule 09.12.2015


Ответы (1)


Оказывается, это проблема с моей настройкой JPA, потому что я использую весеннюю загрузку.

В спящем режиме по умолчанию для свойства spring.jpa.hibernate.ddl-auto установлено значение create-drop, которое по какой-то причине удаляет объект SEQUENCE из H2 ... Я установил для него значение none, и теперь код работает.

Короче говоря, если вы смешиваете JOOQ code-gen с hibernate JPA, убедитесь, что для свойства hibernate.ddl-auto установлено значение none, иначе объекты базы данных могут быть потеряны!

person John    schedule 09.12.2015