我的问题只是放在Grails中:我想要一个插件或示例来进行Domain Classes的翻译。
描述:我希望在它背后有一个很好的数据库方案。例如
域名类别1 :图书(id,author_id,number_pages)
图书的翻译 :( book_id,语言,标题,说明)
域名类别2 :作者(身份证明,生日)
作者的翻译(author_id,language,first_name,last_name)(例如,同一作者在不同国家/地区的不同名称下已知)
我想做什么:了解语言,我想获得带有ID的书,以及EAGER获取其作者(当然书和作者使用正确的翻译)。或者例如,由作者搜索所有书籍,由国家/语言中的first_name知道。
你会如何使用GORM手动完成?
是否有一个插件可以隐藏“业务逻辑”?
或者我怎样才能简单地获得一本书的所有翻译?
答案 0 :(得分:0)
Whab只是按原样使用GORM - 即Book和BookTranslations是两个域对象,Book和BookTranslations之间有一对多的翻译,然后你可以做BookTranslations.findAllByBook,条件查询等。
我建议这样做的原因是你的描述中有一个实体关系(即一对多),所以它不像父/子/嵌入式样式类层次结构会为你做任何事情。这也使您可以完全控制提取策略[1]
我认为这里唯一的'秘诀就是你可以标准化你代表语言的方式。例如,如果您在这些行中实际上有一些unicode文本或映射到标准消息文件,那么您可以使用BookTranslation表中语言列的ISO标准语言名称(例如en-US表示美国英语)。这将允许您直接利用Grails internationalizatino功能,可以自动解析语言环境和消息文件,还有taglib和其他好东西,使国际化不那么痛苦。
见[2]
一个简单的例子如下所示(未经过测试,因此请原谅任何编译错误):
class Book {
String author
int numPages
static hasMany [ bookTranslations: BookTranslations]
}
class BookTranslations {
String language
String title
String description
static belongsTo = Book
}
def book = new Book(author:"test", numPages:20)
book.save()
def translation1 = new BookTranslations(language:"en-us", title:"How to Book", description:"A wonderful book")
book.addToBookTranslations(translation1)
def translation2 = new BookTranslations(language:"en-us", title:"Second How to Book", description:"A glorious book")
book.addToBookTranslations(translation2)
def results = BookTranslations.findAllByBook(book)
// or ..
results = book.bookTranslations
幸运的是,Grails文档中GORM章节中的示例都是关于作者和书籍的。见[3]
[2] http://grails.org/doc/latest/guide/10.%20Internationalization.html
[3] http://grails.org/doc/latest/guide/5.%20Object%20Relational%20Mapping%20%28GORM%29.html
答案 1 :(得分:0)
偶然发现plugin,似乎可能就是你要找的东西。