Вставьте строку со столбцом Instant-DATETIME в MySQL, используя JOOQ - PullRequest
1 голос
/ 02 мая 2020

Я пытаюсь использовать JOOQ для вставки строки в MySQL 8 с отображением Instant <-> DATETIME, но я получаю org.jooq.exception.DataAccessException с root причиной com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Incorrect datetime value: '2020-05-02 02:45:38.134463+00:00' for column 'created' at row 1

По какой-то причине JOOQ добавляет +00:00 в столбец DATETIME, и этот формат не поддерживается MySQL.

Есть идеи, если JOOQ может управлять этим из коробки?

CREATE TABLE `user` (
    `id`       BIGINT       NOT NULL AUTO_INCREMENT,
    `version`  BIGINT       NOT NULL DEFAULT 0,
    `name`     VARCHAR(255) NOT NULL,
    `created`  DATETIME     NOT NULL,
    PRIMARY KEY (`id`),
    UNIQUE INDEX `ind_name`(`name`)
);
@Getter
@Setter
public class User {
    @NonNull
    @Id
    private Long id;
    @NonNull
    @Version
    private Long version;
    @NonNull
    @Column(name = "name")
    private String name;
    @NonNull
    @Column(name = "created")
    private Instant created;
}
dslContext.insertInto( DSL.table( "user" ), field( "name", String.class ),
                //or field( "created", Instant.class), the result is the same
                field( "created", SQLDataType.INSTANT ) ) 
                .values( name, Instant.now() )
                .returningResult( DSL.asterisk() )
                .fetchOne()
                .into( User.class );
...