Hello i’m trying to learn Quarkus with Hibernate but i’ve ran into an issue the schema-validation.
The error:
2021-12-29 16:05:14,915 ERROR [io.qua.hib.orm.run.sch.SchemaManagementIntegrator] (Hibernate post-boot validation thread for ) Failed to validate Schema: Schema-validation: wrong column type encount ered in column [BED_INFO] in table [ROOM]; found [bpchar (Types#CHAR)], but expecting [char (Types#VARCHAR)] 2021-12-29 16:05:14,921 ERROR [io.qua.hib.orm.run.sch.SchemaManagementIntegrator] (Hibernate post-boot validation thread for ) The following SQL may resolve the database issues, as generated by the Hibernate schema migration tool. WARNING: You must manually verify this SQL is correct, this is a best effort guess, do not copy/paste it without verifying that it does what you expect.
the class Room looks like this
@Entity @Table(name = "ROOM") public class Room { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "ROOM_ID") private long id; @Column(name = "NAME") private String name; @Column(name = "ROOM_NUMBER") private String roomNumber; @Column(name = "BED_INFO", columnDefinition = "char") private String bedInfo; public Room(String name, String roomNumber, String bedInfo) { this.name = name; this.roomNumber = roomNumber; this.bedInfo = bedInfo; } }
and the mysql schema like this
CREATE TABLE ROOM( ROOM_ID BIGSERIAL PRIMARY KEY, NAME VARCHAR(16) NOT NULL, ROOM_NUMBER CHAR(2) NOT NULL UNIQUE, BED_INFO CHAR(2) NOT NULL );
According to their documentation this “should” work but i’m perhaps missing something here.
Advertisement
Answer
[BED_INFO] in table [ROOM]; found [bpchar (Types#CHAR)], but expecting [char (Types#VARCHAR)]
Means that Hibernate has found a bpchar(char) where it would expect a varchar. It seems that columnDefinition
does not handle char
. If you really want it to be a char
, try bpchar
instead.
In case it doesn’t work, try running your quarkus app in dev mode with this option in the application.properties file.
quarkus.hibernate-orm.database.generation=create
This will generate the actual DDL for your database that Hibernate is expecting.
Personally I would refrain from columnDefinition
, instead i would use length
and nullable
. Unless you are building an app on an existent, I would also remove name
and @Table
.