Hibernate JPA,MySQL和TinyInt(1)用于布尔值而不是位或字符
这是我的JPA2 / Hibernate定义:
Code:
@Column(nullable = false)
private boolean enabled;
在MySql中,此列被解析为位(1)数据类型 - 这对我不起作用。对于遗留问题,我需要将布尔值映射到一个微小的而不是一个位。但我没有看到更改默认数据类型的可能性。有吗?
这是我的JPA2 / Hibernate定义:
Code:
@Column(nullable = false)
private boolean enabled;
在MySql中,此列被解析为位(1)数据类型 - 这对我不起作用。对于遗留问题,我需要将布尔值映射到一个微小的而不是一个位。但我没有看到更改默认数据类型的可能性。有吗?
@Type注释是休眠注释。
在完整的 JPA2(使用 Hibernate 3.6+)中,将布尔字段映射到 TINYINT(1) SQL 类型而不是 BIT(1) 的方法是使用 columnDefinition 属性。
@Column(nullable = false, columnDefinition = "TINYINT(1)")
private boolean enabled;
nb:length属性在这种情况下似乎没有效果,那么我们就用(1)语法了。
在 Hibernate 4.0+ 中,这种语法可能会导致这样的运行时错误:
Wrong column type Found: bit, expected: TINYINT(1)
似乎在这种情况下,您唯一的方法是在MySQL数据源连接字符串中使用tinyInt1isBit=false,如下所示:
jdbc:mysql://server_host:3306/database?tinyInt1isBit=false
顺便说一句,您现在可以像这样使用 length 属性:
@Column(nullable = false, columnDefinition = "TINYINT", length = 1)
private boolean enabled;
请尝试 .由于某种原因,这没有声明的短类型名称,因此您必须使用:NumericBooleanType
@Column(nullable = false)
@Type(type = "org.hibernate.type.NumericBooleanType")
private boolean enabled;
这确实映射到 INTEGER 类型,但它可能与 TINYINT 一起工作。
更新:在某些RDBMS中不能与TINYINT一起使用。将数据库列类型切换为 INTEGER。或者根据需要使用其他 Java @Type值或列定义。org.hibernate.type.NumericBooleanType
在这个例子中,Dude的答案可以在不进行任何数据库更改的情况下工作。@Column(nullable = false, columnDefinition = "TINYINT(1)")