Об использовании GORM как есть, т. Е. Book и BookTranslations были бы двумя объектами домена с переводом один-ко-многим между Book и BookTranslations, и тогда вы могли бы выполнять BookTranslations.findAllByBook, запросы критериев и т. Д.
Причина, по которой я предлагаю это, заключается в том, что в вашем описании есть отношение сущности (то есть один ко многим), поэтому не похоже, чтобы иерархия класса родительских / дочерних / встроенных стилей что-то сделала для вас. Это также дает вам полный контроль над стратегией извлечения [1]
Я думаю, что единственным «секретным соусом» здесь является то, что вы могли бы стандартизировать способ представления языков. Например, если у вас действительно есть какой-то текст в кодировке Юникод в этих строках или сопоставлениях со стандартными файлами сообщений, вы можете использовать стандартные имена языков ISO для языкового столбца в таблице BookTranslation (например, en-US для американского английского). Это позволило бы вам воспользоваться прямыми возможностями Grails internationalizatino, в которых можно автоматически разрешать локали и файлы сообщений, а также есть теги и другие полезные свойства, которые делают интернационализацию менее болезненной.
См. [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
Как повезет, пример в главе GORM в документации Grails посвящен авторам и книгам. Смотри [3]
[1] http://grails.org/doc/latest/guide/5.%20Object%20Relational%20Mapping%20%28GORM%29.html#5.5.2.8%20Eager%20and%20Lazy%20Fetching
[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