小编典典

Hibernate 4升级后的“发现:位,预期:布尔值”

mysql

我正在尝试从Hibernate 3.6.5升级到4.0(以及从Spring 3.0.5升级到Hibernate 4支持所需的3.1)。

现在,对于MySQL和HSQL,我都遇到了带有持久布尔字段的问题:

Caused by: org.hibernate.HibernateException: 
Wrong column type in PUBLIC.PUBLIC.EVENT for column Checked. Found: bit, expected: boolean
    at org.hibernate.mapping.Table.validateColumns(Table.java:282)
    at org.hibernate.cfg.Configuration.validateSchema(Configuration.java:1268)
    at org.hibernate.tool.hbm2ddl.SchemaValidator.validate(SchemaValidator.java:155)
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:453)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1737)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1775)
    at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:184)
    at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:314)

JPA
@Entity@Column注释用于域对象中,有问题的字段如下所示:

@Column(name = "Checked")
private boolean checked;

HSQL模式:

Checked bit default 0 not null,

MySQL模式:

`Checked` tinyint(1) NOT NULL default '0',

坚持使用Hibernate 4的最简单方法是什么 ?我应该更改数据库架构,Hibernate配置或域类注释吗?

我不知道代码和配置之前是否完全“正确”,但至少在Hibernate 3上可以正常工作。


阅读 284

收藏
2020-05-17

共1个答案

小编典典

我通过添加columnDefinition = "BIT"到@Column行来解决此问题。

@Basic
@Column(name = "B", columnDefinition = "BIT", length = 1)
public boolean isB() {
    return b;
}

它在数据库中也定义为“ BIT(1)”。还与TINYINT合作。这是我找到的最简单的解决方案,因为更改是次要的,不需要接触数据库。

使用:MySQL Server 5.5.13,Hibernate 4.1.1,JDK 1.6

2020-05-17