“Found: bit, expected: boolean” after Hibernate 4 upgrade

最后都变了- 提交于 2019-11-28 06:16:19
baba smith

I worked this out by adding columnDefinition = "BIT" to the @Column line.

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

Its defined as a 'BIT(1)' in the DB as well. Also worked with TINYINT. This is the easiest solution I've found since the change is super-minor and no need to touch the DB.

Using: MySQL Server 5.5.13, Hibernate 4.1.1, JDK 1.6

Michal Stawski

I had the same problem and I extended the Dialect to take into account the fact that mysql treats boolean as an alias of bit.

public class Mysql5BitBooleanDialect extends MySQL5Dialect{     
    public Mysql5BitBooleanDialect() {
        super();
        registerColumnType( java.sql.Types.BOOLEAN, "bit" );        
    }       
}

I don't use longer bit() fields (to represent for example byte[]) so this might break that.

Matthias Wuttke

I was able to solve this issue by adding transformedBitIsBoolean=true to my MySQL connection string. See here: https://hibernate.atlassian.net/browse/HHH-6935

Donatello

This has been answered in a similar question here :

Hibernate JPA, MySQL and TinyInt(1) for Boolean instead of bit or char

Your problem could be a bit more complicated as you use HSQL DB at the same time, but you can take a look and try it anyway !

orasio

Found the problem i also got org.hibernate.HibernateException: Wrong column type ... Found: bit, expected: boolean

on BooleanType in hibernate 4 they changed the Ctor to

public BooleanType() {
    this( org.hibernate.type.descriptor.sql.BooleanTypeDescriptor.INSTANCE, BooleanTypeDescriptor.INSTANCE );
}

instead of old versions

public BooleanType() {
    this( BitTypeDescriptor.INSTANCE, BooleanTypeDescriptor.INSTANCE );
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!