Я отвечаю на свой вопрос, может быть, этот ответ кому-нибудь пригодится.
До сих пор я нашел только один способ реализации данной модели - с помощью файлов отображения XML Hibernate :
<hibernate-mapping package="mappingtest">
<class name="Activity">
<id name="id">
<generator class="native"/>
</id>
<set name="intervals">
<key column="activity_id" not-null="true"/>
<element type="org.joda.time.contrib.hibernate.PersistentInterval">
<column name="startDate"/>
<column name="endDate"/>
</element>
</set>
</class>
</hibernate-mapping>
и реализация класса домена:
class Activity {
Long id
Set intervals = []
static constraints = {
}
}
Мне также пришлось переместить класс домена из grails-app / domain в каталог src / groovy, в противном случае запуск приложения не удался (grails-1.3.5):
...
org.hibernate.DuplicateMappingException: дублирование сопоставления класса / сущности, сопоставление.Activity
...
Вторая проблема с вышеописанной реализацией, которую я обнаружил, заключается в том, что при включении скаффолдинга (для целей тестирования):
class ActivityController {
static scaffold = true
...
}
показ созданного действия завершился ошибкой:
Сообщение об исключении: Нет такого свойства: id для класса: org.joda.time.Interval Возможные решения: end Причина: ошибка при вычислении выражения [i.id] в строке [38]: Нет такого свойства: id для класса: org.joda.time.Interval Возможное решениеion: end
, но ручная реализация получения действий из БД и ее отображения работала.
Редактировать: дополнительно я нашел решение проблем с scaffolding и DuplicateMappingException.Они были вызваны неправильным расположением Activity.hbm.xml - структура каталога пакета отсутствовала.Правильное расположение: grails-app / conf / hibernate / mappingtest / Activity.hbm.xml.