gpt4 book ai didi

grails - Grails:如何分配域字段=从数据库中获取someValue

转载 作者:行者123 更新时间:2023-12-02 14:51:18 27 4
gpt4 key购买 nike

假设我有两个域:

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做到这一点?

最佳答案

我认为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会创建一个属性,该属性的名称与 map 关键字(“国家/地区”)相同,并且类型与 map 值(国家/地区)相同。拥有它并没有什么坏处,但是不是必需的。

此处 load合适的原因是,直到您访问 id之外的持久属性,它才访问数据库。因此,您将其配置为在必要时延迟检索实际实例,但是如果用其他实例覆盖该值,则不会浪费数据库查找初始填充对象。打开SQL日志记录以验证这一点。

关于grails - Grails:如何分配域字段=从数据库中获取someValue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27949446/

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