java-Hibernate JPA,MySQL和TinyInt(1)的布尔值,而不是bit或ch
这是我的JPA2 / Hibernate定义:
Code:
@Column(nullable = false)
private boolean enabled;
在MySql中,此列解析为bit(1)数据类型-不适用于我。 对于遗留问题,我需要将布尔值映射到tinyint而不是一点点。 但是我看不到更改默认数据类型的可能性。 有没有?
5个解决方案
63 votes
@Type注释是一个Hibernate注释。
在完整的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;
Donatello answered 2020-07-05T06:29:36Z
37 votes
尝试@Column(nullable = false, columnDefinition = "TINYINT(1)")。由于某种原因,它没有声明的短类型名称,因此您必须使用:
@Column(nullable = false)
@Type(type = "org.hibernate.type.NumericBooleanType")
private boolean enabled;
这确实映射到INTEGER类型,但可能与TINYINT一起正常工作。
更新:@Column(nullable = false, columnDefinition = "TINYINT(1)")在某些RDBMS中不适用于TINYINT。 将数据库列类型切换为INTEGER。 或根据需要使用其他Java @Type值或columnDefinition。
在此示例中,Dude的@Column(nullable = false, columnDefinition = "TINYINT(1)")答案无需更改任何数据库即可工作。
Mike Q answered 2020-07-05T06:28:54Z
3 votes
我在MySQL数据库上将JPA与Spring Data / Hibernate 5.0一起使用。
在我的Entity对象中,输入以下内容:
@Column(name = "column_name", columnDefinition = "BOOLEAN")
private Boolean variableName;
我的开发环境将hibernate auto-ddl设置为要更新,因此当我部署到开发环境时,它创建的表的column_name类型为tinyint(1)。
我使用此列的代码将null视为false,因此我不担心null,如果是这样,则可以将其设置为原始布尔值,也可以在Column批注中添加“,nullable = false”。
此解决方案完全是JPA(不使用休眠类型注释),并且不需要更改连接字符串。
Annulet Consulting answered 2020-07-05T06:30:14Z
2 votes
我有这个错误:
引起原因:org.springframework.beans.factory.BeanCreationException: 创建名称为“ sessionFactory”的bean时出错 ServletContext资源[/WEB-INF/config/context-config.xml]: 调用init方法失败; 嵌套异常为 org.hibernate.MappingException:无法确定以下类型: org.hibernate.type.NumericBooleanType,在表:bookingItem上,用于 列:[org.hibernate.mapping.Column(enabled)]
这对我有用:
@Column(nullable = false, columnDefinition = "TINYINT(1)")
private boolean enabled;
marioarranzr answered 2020-07-05T06:30:44Z
0 votes
当使用Microsoft sql和某些mysql版本时,请使用以下命令:
@Column(name = "eanbled", columnDefinition = "bit default 0", nullable = false)
private boolean enabled;
对我来说,tinybit,布尔值和其他此类定义都失败了。
Nox answered 2020-07-05T06:31:08Z