Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
grails中的布尔值不会持久化吗?_Grails_Groovy_Boolean_Gorm - Fatal编程技术网

grails中的布尔值不会持久化吗?

grails中的布尔值不会持久化吗?,grails,groovy,boolean,gorm,Grails,Groovy,Boolean,Gorm,我正在Grails1.3.5上开发一个小应用程序,遇到了一个非常奇怪的问题 我的域类具有一些布尔类型的字段。当然,在创建新实例并保存它时,这些字段都不会持久化 例如,我有一个域类Employee,定义如下: class Employee { String name boolean present } 当我创建该类的一个新实例并将其持久化时,名称会被保存,但当前名为boolean的实例不会保存 def newEmp = new Employee(name: "me", present: t

我正在Grails1.3.5上开发一个小应用程序,遇到了一个非常奇怪的问题

我的域类具有一些布尔类型的字段。当然,在创建新实例并保存它时,这些字段都不会持久化

例如,我有一个域类Employee,定义如下:

class Employee {
 String name
 boolean present
} 
当我创建该类的一个新实例并将其持久化时,名称会被保存,但当前名为boolean的实例不会保存

def newEmp = new Employee(name: "me", present: true)
newEmp.save(failOnError: true, flush: true)
保存时,不会引发任何错误。然而,在我使用MySQL的数据库中,二进制列始终保持为空


这可能是什么原因造成的?这在我所有的域类中都会发生

您如何查询该列?“空”是指空吗?默认情况下,Hibernate+MySQL将布尔值保留为一个值为0或1的位,因此在运行select*from foo时,这些值看起来是空的。不过,您可以强制转换为数字:

选择姓名,并显示为未签名的员工

您可以做的另一件事是使用自定义方言,该方言使用“boolean”类型而不是bit:

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
}

问题可能出在其他地方。我在Grails1.2中编写了一个应用程序,它使用booleans和MySql,没有持久性问题

我从来没有遇到过这样的问题。也许您的简化版代码没有向我们显示可能导致错误的原因。你能发布更大的代码片段吗?你的领域真的被命名为现在吗?或者它是mysql中的一个保留字吗?另外,当您将字段设置为布尔值而不是原始布尔值时会发生什么?这会改变行为吗?