gpt4 book ai didi

grails - grails 中的 boolean 值不会被持久化?

转载 作者:行者123 更新时间:2023-12-02 08:19:30 25 4
gpt4 key购买 nike

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

我的域类具有一些 boolean 类型字段。创建新实例(当然也保存它)时,这些字段都不会保留。

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

class Employee {
String name
boolean present
}

当我创建该类的新实例并保留它时,名称会被保存,但当前命名的 boolean 值不会保存。

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

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

这可能是什么原因造成的?我的所有域类都会发生这种情况。

最佳答案

您如何查询该列?你所说的“空”是指空吗?默认情况下,Hibernate + MySQL 会将 boolean 值保留为值为 0 或 1 的位,因此当运行“select * from foo”时,值看起来为空白。不过,您可以转换到一个数字:

从员工中选择姓名,CAST(显示为未签名)

您可以做的另一件事是使用自定义方言,该方言始终使用“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
}

关于grails - grails 中的 boolean 值不会被持久化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4019078/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com