grails中的布尔值不会持久化吗?
我正在Grails1.3.5上开发一个小应用程序,遇到了一个非常奇怪的问题 我的域类具有一些布尔类型的字段。当然,在创建新实例并保存它时,这些字段都不会持久化 例如,我有一个域类Employee,定义如下: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
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中的一个保留字吗?另外,当您将字段设置为布尔值而不是原始布尔值时会发生什么?这会改变行为吗?