Hibernate JPA,MySQL和TinyInt(1)用于布尔而不是位或字符

java mysql hibernate jpa jpa-2.0

67361 观看

5回复

3676 作者的声誉

这是我的JPA2 / Hibernate定义:

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

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

作者: Ta Sas 的来源 发布者: 2010 年 8 月 1 日

回应 (5)


37

16262 作者的声誉

决定

试试吧NumericBooleanType。由于某种原因,这没有声明的短类型名称,因此您必须使用:

@Column(nullable = false)
@Type(type = "org.hibernate.type.NumericBooleanType")
private boolean enabled;

这确实映射到INTEGER类型,但它可能适用于TINYINT。

UPDATE:org.hibernate.type.NumericBooleanType难道不是在某些RDBMS与TINYINT工作。将数据库列类型切换为INTEGER。或者根据需要使用不同的Java @Type值或columnDefinition。

在这个例子中,Dude的答案@Column(nullable = false, columnDefinition = "TINYINT(1)")可以在没有任何数据库更改的情况下工作。

作者: Mike Q 发布者: 01.08.2010 07:22

56

1761 作者的声誉

@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 发布者: 19.04.2012 09:06

1

36 作者的声誉

我有这个错误:

引起:org.springframework.beans.factory.BeanCreationException:在ServletContext资源[/WEB-INF/config/context-config.xml]中定义了名为'sessionFactory'的bean创建错误:init方法的调用失败; 嵌套异常是org.hibernate.MappingException:无法确定:org.hibernate.type.NumericBooleanType的类型,在表:bookingItem,对于列:[org.hibernate.mapping.Column(enabled)]

这对我有用:

@Column(nullable = false, columnDefinition = "TINYINT(1)")
private boolean enabled;
作者: marioarranzr 发布者: 06.08.2015 11:29

1

21 作者的声誉

我在MySQL数据库上使用JPA和Spring Data / Hibernate 5.0。

在我的Entity对象中,我提出以下内容:

@Column(name = "column_name", columnDefinition = "BOOLEAN")
private Boolean variableName;

我的开发环境已将hibernate auto-ddl设置为更新,因此当我部署到dev时,它创建了table_name类型为tinyint(1)的表。

我使用此列的代码将null视为false,因此我不担心空值,如果是,您可以将其设置为原始布尔值或将“,nullable = false”添加到Column注释。

此解决方案完全是JPA(不使用hibernate Type注释),不需要更改连接字符串。

作者: Annulet Consulting 发布者: 26.11.2017 12:10

0

269 作者的声誉

使用Microsoft sql和某些版本的mysql时,请使用以下命令:

@Column(name = "eanbled", columnDefinition = "bit default 0", nullable = false)
private boolean enabled;

对我来说,tinybit,boolean和其他类似的定义都失败了。

作者: Nox 发布者: 16.04.2019 02:43
32x32