问题
在使用Jpa的过程中,数据库表用了tinyint的数据类型,用于记录层级,数据可能是1,2,3
启动应用时候就报:
wrong column type encountered in column [level] in table [tab]; found [tinyint (Types#TINYINT)], but expecting [integer (Types#INTEGER)]
大致意思就是说:
某某表中的某某字段被发现使用了错误的数据类型,发现使用了tinyint数据类型,但应该使用integer数据类型。
原因
查阅后发现,tinyint对应的数据类型应该是boolean,但是我设计表时并没有把这个字段当作一个boolean类型的字段,又不能因为这个问题去修改表,怎么办呢。。。
最后发现,出现这个问题的原因居然是:修改了hibernate的ddl-auto配置,
hibernate-auto设置为validate后,会在启动时自动校验数据类型,因此报错
解决方法
spring.jpa.hibernate.ddl-auto=update
ddl-auto配置的含义:
create 启动时删数据库中的表,然后创建,退出时不删除数据表
create-drop 启动时删数据库中的表,然后创建,退出时删除数据表 如果表不存在报错
update 如果启动时表格式不一致则更新表,原有数据保留
validate 项目启动表结构进行校验 如果不一致则报错