带休眠功能的 Quarkus 发现 [bpchar (Types#CHAR)],但期待 [char (Types#VARCHAR)]
Quarkus with hibernate found [bpchar (Types#CHAR)], but expecting [char (Types#VARCHAR)]
你好,我正在尝试使用 Hibernate 学习 Quarkus,但我 运行 遇到了模式验证问题。
错误:
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.
class 房间看起来像这样
@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;
}
}
和这样的 mysql 模式
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
);
根据他们的文档,这个“应该”有效,但我可能在这里遗漏了一些东西。
[BED_INFO] in table [ROOM]; found [bpchar (Types#CHAR)], but expecting [char (Types#VARCHAR)]
意味着 Hibernate 已经找到了一个 bpchar(char),它应该是一个 varchar。 columnDefinition
似乎没有处理 char
。如果您真的希望它成为 char
,请尝试 bpchar
。
如果它不起作用,请在 application.properties 文件中使用此选项在开发模式下尝试 运行 您的 quarkus 应用程序。
quarkus.hibernate-orm.database.generation=create
这将为您的数据库生成 Hibernate 期望的实际 DDL。
就我个人而言,我会避免使用 columnDefinition
,而是使用 length
和 nullable
。除非你在现有的基础上构建应用程序,否则我也会删除 name
和 @Table
.
你好,我正在尝试使用 Hibernate 学习 Quarkus,但我 运行 遇到了模式验证问题。
错误:
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.
class 房间看起来像这样
@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;
}
}
和这样的 mysql 模式
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
);
根据他们的文档,这个“应该”有效,但我可能在这里遗漏了一些东西。
[BED_INFO] in table [ROOM]; found [bpchar (Types#CHAR)], but expecting [char (Types#VARCHAR)]
意味着 Hibernate 已经找到了一个 bpchar(char),它应该是一个 varchar。 columnDefinition
似乎没有处理 char
。如果您真的希望它成为 char
,请尝试 bpchar
。
如果它不起作用,请在 application.properties 文件中使用此选项在开发模式下尝试 运行 您的 quarkus 应用程序。
quarkus.hibernate-orm.database.generation=create
这将为您的数据库生成 Hibernate 期望的实际 DDL。
就我个人而言,我会避免使用 columnDefinition
,而是使用 length
和 nullable
。除非你在现有的基础上构建应用程序,否则我也会删除 name
和 @Table
.