【问题标题】:How to map tinyint to Integer in mysql and spring-boot?如何在mysql和spring-boot中将tinyint映射到整数?
【发布时间】:2021-09-27 20:33:25
【问题描述】:

我从spring-boot-2.4.5升级到spring-boot-2.5.0

由于从 mariadb-java-client-2.7.2 升级到 mariadb-java-client-2.7.3 会出现此问题。但我不知道为什么,我不知道这更多的是休眠还是 mariadb 连接器问题。

现在我的应用程序启动失败:

found [bit (Types#TINYINT)], but expecting [tinyint unsigned (Types#INTEGER)]

我已将该列声明为Integer 类型的@Column("TINYINT"),而在mysql 中它是一个真正的tinyint,在升级之前它可以正常工作!

@Column(columnDefinition = "TINYINT")
public Integer counter;
    
    
CREATE TABLE foo {
    ... 
    counter tinyint NOT NULL,
    ...
}

我能做什么?为什么突然不支持tinyint了?

完整日志:

Caused by: org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: wrong column type encountered in column [count] in table [foo]; found [bit (Types#TINYINT)], but expecting [tinyint unsigned (Types#INTEGER)]
    at org.hibernate.tool.schema.internal.AbstractSchemaValidator.validateColumnType(AbstractSchemaValidator.java:159) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final]
    at org.hibernate.tool.schema.internal.AbstractSchemaValidator.validateTable(AbstractSchemaValidator.java:143) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final]
    at org.hibernate.tool.schema.internal.GroupedSchemaValidatorImpl.validateTables(GroupedSchemaValidatorImpl.java:42) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final]
    at org.hibernate.tool.schema.internal.AbstractSchemaValidator.performValidation(AbstractSchemaValidator.java:89) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final]
    at org.hibernate.tool.schema.internal.AbstractSchemaValidator.doValidation(AbstractSchemaValidator.java:68) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final]
    at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:192) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final]
    at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:73) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final]
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:318) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final]
    at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:468) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final]
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1259) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final]
    at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:58) ~[spring-orm-5.3.8.jar:5.3.8]
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365) ~[spring-orm-5.3.8.jar:5.3.8]
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) ~[spring-orm-5.3.8.jar:5.3.8]
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) ~[spring-orm-5.3.8.jar:5.3.8]
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:341) ~[spring-orm-5.3.8.jar:5.3.8]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1845) ~[spring-beans-5.3.8.jar:5.3.8]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1782) ~[spring-beans-5.3.8.jar:5.3.8]
    ... 21 more

【问题讨论】:

    标签: java mysql spring spring-boot hibernate


    【解决方案1】:

    将代码修改为:

    @Column(columnDefinition = "TINYINT")
    @Type(type = "org.hibernate.type.IntegerType")
    public Integer counter;
    

    【讨论】:

    • 同样的错误:[bit (Types#TINYINT)], but expecting [tinyint(1) unsigned (Types#INTEGER)]
    • @membersound 我已经更新了我的答案。只需检查这是否有效。
    • 很遗憾没有:found [bit (Types#TINYINT)], but expecting [tinyint(1) unsigned (Types#INTEGER)]
    猜你喜欢
    • 2018-06-21
    • 1970-01-01
    • 2018-08-05
    • 2019-07-08
    • 1970-01-01
    • 1970-01-01
    • 2020-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多