Hibernate JPA,MySQL和TinyInt(1)用于Boolean而不是bit或char

这是我的JPA2 / Hibernate的定义:

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

在MySql中,这个列被parsing为一个位(1)数据types – 这对我不起作用。 对于遗留问题,我需要将布尔值映射到tinyint。 但我没有看到更改默认数据types的可能性。 有没有?

尝试NumericBooleanType 。 出于某种原因,这没有一个声明的短型名称,所以你必须使用:

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

这确实映射到INTEGERtypes,但它可能会与TINYINT正常工作。

更新: org.hibernate.type.NumericBooleanType在某些RDBMS中不能与TINYINT一起使用。 将数据库列types切换为INTEGER。 或者根据需要使用不同的Java @Type值或columnDefinition。

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

@Type注释是一个Hibernate注释。

在完整的JPA2(使用Hibernate 3.6+ )中,将布尔字段映射到TINYINT(1)SQLtypes而不是BIT(1)的方法是使用columnDefinition属性。

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

nb:长度属性在这种情况下似乎没有效果,那么我们使用(1)语法。


使用Hibernate 4.0+ ,这种语法可能会导致像这样的运行时错误:

 Wrong column type Found: bit, expected: TINYINT(1) 

看来在这种情况下,你唯一的方法就是在MySQL数据源连接string中使用tinyInt1isBit = false

 jdbc:mysql://server_host:3306/database?tinyInt1isBit=false 

顺便说一下,你现在可以使用这样的长度属性:

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

我有这个错误:

由于:org.springframework.beans.factory.BeanCreationException:在ServletContext资源[/WEB-INF/config/context-config.xml]中定义的名为'sessionFactory'的Bean创build错误:init方法的调用失败; 嵌套的exception是org.hibernate.MappingException:无法确定types:org.hibernate.type.NumericBooleanType,在表:bookingItem,为列:[org.hibernate.mapping.Column(启用)]

这对我有效:

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