Hibernate + Derby: Comparisons between 'BOOLEAN' and 'INTEGER' are not supported

前端 未结 4 1827
执笔经年
执笔经年 2021-01-13 16:32

I have a problem with querying Derby database. I am using Hibernate with JPA. Problem is related (probably) to boolean columns. Each query ends with error:

org.h

4条回答
  •  梦毁少年i
    2021-01-13 17:12

    Used Rafal's approach but also have to add

    @Override
    public String toBooleanValueString(boolean bool) {
        return bool ? "1" : "0";
    }
    

    in my Dialect. Otherwise it doesn't work under Hibernate 4.2.8.

    Also I wasn't be able to specify my dialect explicitly in persistence.xml as my app runs against Oracle and Derby. So I've added a dialect resolver for my dialect:

    
    

    Resolver itself:

    public class DerbyBoolAsIntDialectResolver extends AbstractDialectResolver {
        @Override
        protected Dialect resolveDialectInternal(DatabaseMetaData metaData) throws SQLException {
            String databaseName = metaData.getDatabaseProductName();
            int databaseMajorVersion = metaData.getDatabaseMajorVersion();
    
            if ( "Apache Derby".equals( databaseName ) ) {
                final int databaseMinorVersion = metaData.getDatabaseMinorVersion();
                if ( databaseMajorVersion > 10 || ( databaseMajorVersion == 10 && databaseMinorVersion >= 7 ) ) {
                    return new DerbyBoolAsIntDialect();
                }
            }
            return null;
        }
    }
    

提交回复
热议问题