Grails:如何从数据库中分配domain field = someValue

时间:2015-01-14 17:59:31

标签: grails gorm

假设我有两个域:

class Country {

   String name
   String Desc

   static hasMany = [organizations: Organization]
}

class Organization {
   String name
   Country country

   static belongsTo = [country:Country]
}

注意:如果是创建组织,国家/地区将列在组合框中。

假设我的数据库中有4行,我从bootstrap中获取了该行。

**Name**    **Desc**
US      USA
CA      CAN
NP      NEP
IN      IND

我想在创建组织时将USA指定为默认值。有没有办法从域级别而不是gsp?

1 个答案:

答案 0 :(得分:0)

我认为load method是你最好的选择,虽然它要求你知道你想成为默认实例的id。硬编码这不是一个好主意,因为它可能会在未来发生变化。但是你可以在应用程序启动时查找并保存id,例如

class BootStrap {

   def grailsApplication

   def init = {
      def usa = Country.findByName('US')
      grailsApplication.config.COUNTRY_US_ID = usa.id
   }
}

使用您想要的任何配置键。

然后更改Organization类以在其构造函数中调用load

import grails.util.Holders

class Organization {

   Organization() {
      if (Holders.config.COUNTRY_US_ID) {
         country = Country.load(Holders.config.COUNTRY_US_ID)
      }
   }

   String name

   static belongsTo = [country:Country]
}

请注意,我删除了Country country属性,因为它是多余的;添加belongsTo创建一个与地图键(“country”)同名并且与地图值(Country)具有相同类型的属性。拥有它并没有什么坏处,但它不是必需的。

这里load合适的原因是,在访问id以外的持久属性之前,它不会访问数据库。因此,如果需要,您可以将其配置为懒惰地检索实例,但如果使用其他实例覆盖该值,则不会浪费数据库查找初始填充。打开SQL日志记录以验证这一点。