java - Hibernate JPA、MySQL 和 TinyInt(1) 用于 boolean 而不是位或字符

标签 java mysql hibernate jpa jpa-2.0

这是我的 JPA2/Hibernate 定义:

Code:
@Column(nullable = false)
private boolean enabled;

在 MySql 中,此列被解析为 bit(1) 数据类型 - 这对我不起作用。对于遗留问题,我需要将 boolean 值映射到 tinyint 而不是一点点。但我看不到更改默认数据类型的可能性。有吗?

最佳答案

@Type 注解是一个 Hibernate 注解。

在完整的 JPA2(带有 Hibernate 3.6+)中,将 boolean 字段映射到 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

顺便说一句,您现在可以像这样使用长度属性:

@Column(nullable = false, columnDefinition = "TINYINT", length = 1)
private boolean enabled;

关于java - Hibernate JPA、MySQL 和 TinyInt(1) 用于 boolean 而不是位或字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3383169/

相关文章:

java - 我怎样才能显示jpanel?

java - 在 Hibernate 中提取 *HQL*

java - org.hibernate.MappingException : property mapping has wrong number of columns in ENUM entity

java - Hibernate 查询(不是 SQL)日志记录

java - 由于授权无法访问API

java - 用户输入到java中的文本文件中

java - 关闭 CallableStatement

php - MYSQL选择所有具有最近日期的记录

mysql - 如何导出 sugarcrm 中的潜在客户历史记录部分?

MySQL Workbench : Which collation will allow the widest range of characters, 包括外来字符/重音字符?