BIGINT UNSIGNED автоинкремент сломан с mybatis - PullRequest
0 голосов
/ 12 июня 2018

Итак, у меня есть:

  • столбец PK:

    id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT
    
  • объект POJO с полем id

    java.math.BigInteger id field
    
  • метод вставки сопоставления:

        @Insert("INSERT INTO " +
        "table_name (" +
        "created_at_ts, " +
        "updated_at_ts" +
        ") " +
        "VALUES (" +
        "UNIX_TIMESTAMP(), " +
        "UNIX_TIMESTAMP()" +
        ")")
        @Options(useGeneratedKeys = true, keyColumn = "id")
        void insert(Entity entity);
    
  • Вызов метода вставки сопоставления, например:

    commandMapper.insert(entity);
    

Все это прекрасно работает, пока не будет успешно вставлено определенное количество строк.Я неожиданно получаю следующую ошибку при вставке строки в дочернюю таблицу:

    org.springframework.dao.DataIntegrityViolationException: 
    ### Error updating database.  Cause: java.sql.BatchUpdateException: 
    Out of range value for column 'parent_id' at row 1

Похоже, что результат в следующем порядке:

    SELECT Auto_increment FROM information_schema.tables WHERE 
    table_name='table';

    -> 32770

Но значение BigIntegerполе id сущности неверно:

    System.out.println(entity.getId());

    -> -32767

Как я могу получить отрицательное значение в сущности POJO?

Очевидно:

  • с использованием BigIntegerTypeHandler не решает проблему
  • переключение с BIGINT UNSIGNED на INT UNSIGNED и с java.math.BigIntegerLong исправляет это.

Но может быть другой способ?

Большое спасибо.

1 Ответ

0 голосов
/ 13 июня 2018

Чтобы устранить эту проблему, пришлось столкнуться с spring-jdbc и mariadb-java-client.

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