gpt4 book ai didi

sql - Grails i18n。使用一个SQL select查询域类和翻译

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

我正在构建一个Grails应用程序,其中包含用户可以以多种语言输入的数据。找不到翻译时,英语被视为显示的默认语言。在该站点上进行了一些浏览之后,我得到了以下域类。

class SomeData {
String name // Default English name
String description // Default English description
int otherData
double moreData
....
SomeDataTranslation translation
static transients = ['translation']
static hasMany = [translations: SomeDataTranslation]

def getName() {
if (translation) return translation.name
return name
}
}

class SomeDataTranslation {
String languageCode
String name // Name in some other language
String description // Description in some other language
static belongsTo = [data: SomeData]
}

我正在尝试进行设置,以便理想情况下可以使用一条SQL语句查询它。那么,如何使用GORM填充 transient “translation”成员变量?基本用例是,我需要将SomeData实例的列表作为JSON返回,并使用已翻译的文本(如果存在)。因此,我希望能够做一个简单的查询,该查询返回SomeData实例,如果存在所请求语言的翻译,该实例将设置“translation”成员变量。

我摸索了派生属性,但得出的结论是派生属性只能从其他属性派生。我无法使用语言代码请求参数。

编辑

按照塞吉奥·米歇尔斯(SérgioMichels)的建议,我一直在尝试使用HQL进行此操作,并且我非常接近,但目前为止还没有。这是我到目前为止所拥有的:
def query = 'select sd,dt from SomeData as sd, SomeDataTranslation as sdt
where sd.name like ? and sdt.data = sd and sdt.languageCode = ?'
def queryParams =["something%", "es"]
def result = SomeData.executeQuery(query, queryParams, [readOnly: true])

def dataList = []
result.each {
it[0].translation = it[1]
SomeData someData = it[0]
someData.translation = it[1] // Fill the transient 'translation' property
dataList << someData
}

我遇到的问题是,“where”子句过滤掉根本没有翻译的SomeData实例。我使用左联接来确保查询返回搜索字符串为“something”的所有SomeData实例,并且当不存在任何转换时,我希望'translation'属性为null。如果我删除“sdt.languageCode =?”过滤器,我得到所有语言的所有翻译。那么如何在保留空值的同时过滤所需的语言呢?

最佳答案

您可以使用executeQuery在一个查询中返回SomeDataSomeDataTranslation。这将返回一个数组给您,然后您需要手动分配翻译。

SomeData getSomeData() {

def result = SomeData.executeQuery(' from SomeData sd, SomeDataTranslation sdt where sdt.data = sd', [max: 1])

println result //[SomeData , SomeDataTranslation]

SomeData sd = result[0]
sd.translation = result[1]

return sd
}

值得一提的是,它使用 Hibernate's HQL syntax构建查询。

关于sql - Grails i18n。使用一个SQL select查询域类和翻译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19928409/

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