Ta *_*Sas 46 java mysql hibernate jpa jpa-2.0
这是我的JPA2/Hibernate定义:
Code:
@Column(nullable = false)
private boolean enabled;
Run Code Online (Sandbox Code Playgroud)
在MySql中,此列被解析为bit(1)数据类型 - 这对我不起作用.对于遗留问题,我需要将布尔值映射到tinyint而不是一点点.但我没有看到更改默认数据类型的可能性.有没有?
Don*_*llo 63
@Type注释是一个Hibernate注释.
在完整的JPA2(使用Hibernate 3.6+)中,将布尔字段映射到TINYINT(1)SQL类型而不是BIT(1)的方法是使用columnDefinition属性.
@Column(nullable = false, columnDefinition = "TINYINT(1)")
private boolean enabled;
Run Code Online (Sandbox Code Playgroud)
nb:length属性似乎在这种情况下没有效果,然后我们使用(1)语法.
使用Hibernate 4.0+,这种语法可能会导致运行时错误,如下所示:
Wrong column type Found: bit, expected: TINYINT(1)
Run Code Online (Sandbox Code Playgroud)
看来在这种情况下,你唯一的办法是在MySQL数据源连接字符串中使用tinyInt1isBit = false,如下所示:
jdbc:mysql://server_host:3306/database?tinyInt1isBit=false
Run Code Online (Sandbox Code Playgroud)
顺便说一句,您现在可以使用如下的length属性:
@Column(nullable = false, columnDefinition = "TINYINT", length = 1)
private boolean enabled;
Run Code Online (Sandbox Code Playgroud)
Mik*_*e Q 38
试试吧NumericBooleanType
.由于某种原因,这没有声明的短类型名称,因此您必须使用:
@Column(nullable = false)
@Type(type = "org.hibernate.type.NumericBooleanType")
private boolean enabled;
Run Code Online (Sandbox Code Playgroud)
这确实映射到INTEGER类型,但它可能适用于TINYINT.
UPDATE:org.hibernate.type.NumericBooleanType
难道不是在某些RDBMS与TINYINT工作.将数据库列类型切换为INTEGER.或者根据需要使用不同的Java @Type值或columnDefinition.
在这个例子中,Dude的答案@Column(nullable = false, columnDefinition = "TINYINT(1)")
可以在没有任何数据库更改的情况下工作.
小智 5
我在 MySQL 数据库上使用 JPA 和 Spring Data/Hibernate 5.0。
在我的实体对象中,我放置了以下内容:
@Column(name = "column_name", columnDefinition = "BOOLEAN")
private Boolean variableName;
Run Code Online (Sandbox Code Playgroud)
我的开发环境将休眠自动 ddl 设置为更新,因此当我部署到开发时,它创建了带有 tinyint(1) 类型的 column_name 的表。
我使用此列的代码将 null 视为 false,因此我不担心 null,如果是,您可以将其设为原始布尔值或在 Column 注释中添加“, nullable = false”。
此解决方案完全是 JPA(不使用休眠类型注释)并且不需要更改连接字符串。
归档时间: |
|
查看次数: |
75073 次 |
最近记录: |