Spring Boot with JPA - в столбце обнаружен неправильный тип столбца - PullRequest
0 голосов
/ 17 февраля 2020

Я использую Spring Boot Starter Data Jpa (2.1.9.RELEASE) и пытаюсь отобразить эту таблицу:

CREATE TABLE `foo` (
  `id` int(11) NOT NULL,
  `woo` tinyint(4) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

Объект отображается следующим образом:

@Entity
@Table(name = "foo")
public class Foo {

    @Id
    @Column(name = "id")
    private Integer id;

    @Column(name = "woo")
    private Integer woo;

    public Integer getId() {
        return id;
    }

    public Integer getWoo() {
        return woo;
    }

}

Когда я запускаю приложение, я получаю следующую ошибку:

Caused by: org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: wrong column type encountered in column [woo] in table [foo]; found [tinyint (Types#TINYINT)], but expecting [integer (Types#INTEGER)]

Мои свойства:

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql:///test
spring.datasource.username=root
spring.datasource.password=root
spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect
spring.jpa.hibernate.ddl-auto=validate

Я пытался сделать то же самое сопоставление, используя vanilla Jpa и Hibernate ( не управляется Spring) и работает нормально.

Может кто-нибудь указать мне правильное направление?

Вот ссылка на проект maven , на случай, если кто-то захочет попробуйте прямо.

Ответы [ 3 ]

2 голосов
/ 17 февраля 2020

JDB C тип крошечного эквивалента Java тип Байт. Вот документация гибернации. Отображение типа данных

Инструмент JBoss будет полезен, если вы используете eclipse / STS для генерации сущностей непосредственно из таблиц без конфликта типов данных.

2 голосов
/ 17 февраля 2020

Ваша база данных использует TinyInt, в то время как ваш класс заставляет ее ожидать целое число. TinyInt, однако, преобразуется в байты, и именно здесь происходит путаница.

@Column(name = "woo")
private Byte woo;

Ссылка для типов отображения может быть найдена здесь .

0 голосов
/ 17 февраля 2020

Возможно, вам нужно переопределить стандартный тип JDB C Hibernate, используя явное объявление типа:

@Column(name = "woo", columnDefinition = "TINYINT(4)")
private Integer woo;

Это должно исправить.

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