grails中的布尔没有坚持?

时间:2010-10-25 21:35:00

标签: grails groovy boolean gorm

我正在Grails 1.3.5上开发一个小应用程序,我遇到了这个非常奇怪的问题。

我的域类具有一些布尔类型字段。创建新实例时不会保留这些字段(并保存当然)。

例如,我有这个域类“Employee”,定义如下(简化):

class Employee {
 String name
 boolean present
} 

当我创建该类的新实例并且我坚持它时,名称被保存,但是当前命名的布尔值不是。

def newEmp = new Employee(name: "me", present: true)
newEmp.save(failOnError: true, flush: true)

保存时,不会抛出任何错误。但是,在数据库中(我使用MySQL),二进制列“present”始终为空。

可能导致这种情况的原因是什么?这发生在我的所有域类中。

2 个答案:

答案 0 :(得分:5)

你是如何查询专栏的? '空'你的意思是null吗?默认情况下,Hibernate + MySQL会将布尔值保持为0或1的位,因此当运行“select * from foo”时,值看起来是空白的。你可以投射到一个数字:

select name, CAST(present AS UNSIGNED) from employee

你可以做的另一件事是使用一个自定义Dialect,它使用'boolean'类型而不是一点点来持续:

package com.yourcompany.yourapp

import java.sql.Types
import org.hibernate.dialect.MySQL5InnoDBDialect

class MyDialect extends MySQL5InnoDBDialect {
   public MyDialect() {
      registerColumnType(Types.BIT, "boolean")
   }
}

在DataSource.groovy中注册为

dataSource {
   pooled = true
   driverClassName = 'com.mysql.jdbc.Driver'
   username = '...'
   password = '...'
   dialect = com.yourcompany.yourapp.MyDialect
}

答案 1 :(得分:0)

问题在于其他地方。我在Grails 1.2中编写了一个使用布尔和MySql的应用程序,没有持久性问题。

相关问题