Grails hibernate创建一个只有一行的表



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

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

class Book {
  Integer year
  static mapping = {
     ...
  }
}

我需要在域类中写什么?

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

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

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

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

我想到了两个解决方案:

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

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

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

最新更新