【发布时间】:2011-04-30 02:19:18
【问题描述】:
我想知道是否可以实现以下领域模型。
让我们有一个包含一组间隔(joda time)的域类。我可以使用 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 [主要] 错误 context.GrailsContextLoader - 错误 执行引导程序:创建错误 名为'messageSource'的bean: bean初始化失败;嵌套的 例外是 org.springframework.beans.factory.BeanCreationException: 创建具有名称的 bean 时出错 'transactionManager':无法解决 对 bean 'sessionFactory' 的引用 在设置 bean 属性时 '会话工厂';嵌套异常是 org.springframework.beans.factory.BeanCreationException: 创建具有名称的 bean 时出错 'sessionFactory':初始化的调用 方法失败;嵌套异常是 org.hibernate.MappingException: 外键 (FK4FDC5B1E5107CA0:activity_intervals [start,end])) 必须有相同数量的 列作为引用的主键 (活动 [id]) org.springframework.beans.factory.BeanCreationException: 创建具有名称的 bean 时出错 'messageSource':初始化 豆失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException: 创建具有名称的 bean 时出错 'transactionManager':无法解决 对 bean 'sessionFactory' 的引用 在设置 bean 属性时 '会话工厂';嵌套异常是 org.springframework.beans.factory.BeanCreationException: 创建具有名称的 bean 时出错 'sessionFactory':初始化的调用 方法失败;嵌套异常是 org.hibernate.MappingException: 外键 (FK4FDC5B1E5107CA0:activity_intervals [start,end])) 必须有相同数量的 列作为引用的主键 (活动 [id]) 在 org.grails.tomcat.TomcatServer.start(TomcatServer.groovy:212)
我认为解决此问题的方法是提取 Interval 以分离扩展 Interval 的域类并在其中指定映射。但是,Interval 是 final 类,因此无法扩展。
感谢您的建议。
【问题讨论】:
标签: hibernate grails mapping usertype grails-domain-class