在grails 2.4.3升级之后,与boolean相关的不必要的数据库changeSet

时间:2014-10-10 11:24:36

标签: hibernate postgresql grails gorm

我正在使用postgres数据库。升级到grails 2.4.3后,我得到所有布尔字段的此类型的数据库更改集:

changeSet(author: "me(generated)", id: "1383573084784-1") {
    addColumn(tableName: "chapter") {
        column(defaultValue: true, name: "is_framable", type: "boolean") {
            constraints(nullable: "false")
        }
    }
}

isFramable是域类boolean中的Chapter字段。即使在运行此迁移后,它也会每次dbm-gorm-diff

生成

我注意到在旧版本的grails中,更改集中曾经有bool而不是boolean

我使用的是hibernate版本4.3.5.5

2 个答案:

答案 0 :(得分:3)

我的解决方法:

Config.groovy中

grails.gorm.default.mapping = {
    "user-type" type: my.hibernate.type.BooleanBitType, class: boolean
    "user-type" type: my.hibernate.type.BooleanBitType, class: Boolean
}

BooleanBitType.java

import my.hibernate.type.descriptor.BooleanBitTypeDescriptor;
import org.hibernate.type.descriptor.java.BooleanTypeDescriptor;
import org.hibernate.type.descriptor.sql.SqlTypeDescriptor;

public class BooleanBitType extends org.hibernate.type.BooleanType {
    public static final BooleanBitType INSTANCE = new BooleanBitType();

    public BooleanBitType() {
        this(BooleanBitTypeDescriptor.INSTANCE, BooleanTypeDescriptor.INSTANCE);
    }

    protected BooleanBitType(SqlTypeDescriptor sqlTypeDescriptor, BooleanTypeDescriptor javaTypeDescriptor) {
        super(sqlTypeDescriptor, javaTypeDescriptor);
    }
}

BooleanBitTypeDescriptor.java

public class BooleanBitTypeDescriptor extends org.hibernate.type.descriptor.sql.BooleanTypeDescriptor {
    public static final BooleanBitTypeDescriptor INSTANCE = new BooleanBitTypeDescriptor();

    public BooleanBitTypeDescriptor() {
        super();
    }

    public int getSqlType() {
        return Types.BIT;
    }
}

答案 1 :(得分:0)

在grails 2.5.4中仍然存在Bug 很糟糕地获取Postgres用户b / c postgres没有等效的位数据类型。它有一个位字符串,它不等同于保持布尔值。 Grails文档建议切换到char(1)布尔值的Y / N版本。

' user-type'(type:org.hibernate.type.YesNoType,class:Boolean)

http://grails.github.io/grails-doc/2.5.4/ref/Database%20Mapping/Usage.html

但是,我不喜欢弯曲我的数据库架构以适应应用程序框架中的错误。

所以,我可能只是忽略这些不必要的变更集。