Grails: сопоставление классов домена (коллекция пользовательских типов в спящем режиме)
Мне интересно, если возможно реализовать следующую модель предметной области.
Давайте иметь класс домена, который содержит множество интервалов (время йода). Я могу использовать org.joda.time.contrib.hibernate.PersistentInterval тип пользователя hibernate для отображения Interval в таблицу базы данных (аналогично тому, как вhttp://www.grails.org/JodaTime+Plugin). Однако я не могу понять, как реализовать отображение, если у меня есть набор интервалов, а не только один интервал.
Пример:
class Activity {
...
Set intervals = []
...
static hasMany = [
intervals: org.joda.time.Interval
]
// This is incorrect implementation, I have set of intervals
// and this would be correct if I had only one interval
// How to implement mapping in this case?
static mapping = {
intervals type: PersistentInterval, {
column name: "start"
column name: "end"
}
}
}
Реализация выше терпит неудачу со следующей ошибкой:
2010-10-23 18: 30: 25,483 [main] ОШИБКА context.GrailsContextLoader - Ошибка при выполнении начальной загрузки: Ошибка при создании компонента с именем 'messageSource': Ошибка инициализации компонента; вложенное исключение: org.springframework.beans.factory.BeanCreationException: ошибка при создании компонента с именем'actionManager ': невозможно разрешить ссылку на компонент' sessionFactory 'при установке свойства компонента' sessionFactory '; вложенное исключение - org.springframework.beans.factory.BeanCreationException: ошибка при создании компонента с именем 'sessionFactory': сбой вызова метода init; вложенное исключение: org.hibernate.MappingException: внешний ключ (FK4FDC5B1E5107CA0: activity_intervals [start, end])) должен иметь такое же количество столбцов, что и первичный ключ, на который имеется ссылка (action [id]) org.springframework.beans.factory.BeanCreationException: ошибка создание компонента с именем 'messageSource': не удалось инициализировать компонент; вложенное исключение: org.springframework.beans.factory.BeanCreationException: ошибка при создании компонента с именем'actionManager ': невозможно разрешить ссылку на компонент' sessionFactory 'при установке свойства компонента' sessionFactory '; вложенное исключение - org.springframework.beans.factory.BeanCreationException: ошибка при создании компонента с именем 'sessionFactory': сбой вызова метода init; вложенным исключением является org.hibernate.MappingException: внешний ключ (FK4FDC5B1E5107CA0: activity_intervals [start, end])) должен иметь то же количество столбцов, что и первичный ключ, на который есть ссылка (action [id]), в org.grails.tomcat.TomcatServer.start ( TomcatServer.groovy: 212)
Я подумал, что обойти эту проблему можно, чтобы извлечь Interval в отдельный класс домена, расширяющий Interval, и указать в нем отображение. Тем не менее, Interval является конечным классом, поэтому расширение невозможно
Спасибо за ваши советы.