Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.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
Sql grails hibernate创建一个只有一行的表_Sql_Hibernate_Grails_Gorm - Fatal编程技术网

Sql grails hibernate创建一个只有一行的表

Sql grails hibernate创建一个只有一行的表,sql,hibernate,grails,gorm,Sql,Hibernate,Grails,Gorm,我需要创建一个只包含一行的表 我有一个域类,例如Book,它的属性是Year class Book { Integer year static mapping = { ... } } 我需要在域类中编写什么?例如,如果您只需要一个包含年份2013的图书记录,那么您可以将约束定义为 class Book { Integer year static constraints = { year inList: [2013], unique: true

我需要创建一个只包含一行的表

我有一个域类,例如
Book
,它的属性是
Year

class Book {

  Integer year

  static mapping = {
     ...
  }

}

我需要在域类中编写什么?

例如,如果您只需要一个包含年份
2013
的图书记录,那么您可以将约束定义为

class Book {
  Integer year
  static constraints = {
     year inList: [2013], unique: true
  }
}

unique:true
不允许您使用重复的
year
创建记录,并且
inList
将确保您有且只有一个
year
,即2013年。这两个约束将在第一次插入时通过,并在后续插入/更新时失败。因此,您在2013年的
书籍中只获得了一条记录。

不幸的是,您在插入之前用于完成此
的GORM事件不允许拒绝插入(从Grails 2.2.2开始)
beforeUpdate
可以,但在这种情况下对您没有帮助

我想到了两种解决方案:

  • 使用服务方法执行是否插入的决策。但是,如果另一个类直接使用域类,则不会自动拒绝插入

  • 创建一个自定义Hibernate,检查表是否已经有数据


Burt Beckwith概述了如何使用自定义Hibernate事件侦听器在his中创建有效的只读域类,如果您想使用后者的示例。

我认为您没有声明行数限制。你可以对年份有一个唯一的限制,这就足够了吗?