Raj*_*Dee 2 grails groovy boolean grails-orm
我正在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"始终为空.
可能是什么导致了这个?这发生在我的所有域类中.
你是如何查询专栏的?'空'你的意思是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
}
| 归档时间: | 
 | 
| 查看次数: | 2611 次 | 
| 最近记录: |