0

我需要创建一个只有一行的表。

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

class Book {

  Integer year

  static mapping = {
     ...
  }

}

我需要在域类中写什么?

4

2 回答 2

0

例如,如果您只需要一个带有 year 的书籍记录2013,那么您可以将约束定义为

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

unique: true不会让您创建重复的记录,yearinList确保您有一个且只有一个year是 2013 年。这两个约束都将在第一次插入时通过,而在后续插入/更新时将失败。因此,您最终在Book2013 年只有一条记录。

于 2013-06-19T16:06:17.317 回答
0

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

想到了两种解决方案:

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

  • 创建一个自定义的 Hibernate PreInsertEventListener来检查表是否已经有数据。

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

于 2013-06-19T18:13:13.580 回答