【问题标题】:GORM: How to map Interval to columns?GORM:如何将间隔映射到列?
【发布时间】:2013-09-09 13:18:49
【问题描述】:

我有一个类似于以下使用 JodaTime 的 Interval 类的类。 Joda Time Grails 插件不支持开箱即用的 Interval 字段,因此我尝试根据 Rob's suggestion how to persist DateTimeTZ 自行映射它。

import org.jadira.usertype.dateandtime.joda.PersistentInterval
import org.joda.time.Interval

class Offer {

    Interval time

    static mapping = {
        time type: PersistentInterval, {
            column name: "start_date_time"
            column name: "end_date_time"
        }
    }
}

我的问题是我遇到了以下异常。

Caused by: java.lang.RuntimeException: Cannot treat multi-column property as a single-column property
    at org.springsource.loaded.ri.ReflectiveInterceptor.jlrConstructorNewInstance(ReflectiveInterceptor.java:991)
    at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1375)
    at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:717)
    at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:188)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1514)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452)
    ... 111 more

有人知道如何正确映射区间吗?

【问题讨论】:

标签: hibernate grails grails-orm jodatime


【解决方案1】:

我没有可以试用的 Grails 应用程序,但这适用于我基于 J2EE 的应用程序:

@Columns(columns = { @Column(name = "start_date_time"), @Column(name = "end_date_time") })
@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentInterval")
private Interval time;

显然它没有使用 Groovy 和 GORM 的优点......但暂时可能是一个可行的解决方案。

【讨论】:

  • 您的实体上的 start_date_time 和 end_date_time 是实际字段吗?
  • 不。 start_date_time 和 end_date_time 是表上的列,但不是 Java 对象上的字段。使用此设置,它们会自动映射到间隔开始和结束。
  • 如果我们想坚持使用 GORM 而不是处理 @Columns@Type 来自的 JPA 怎么办?
  • @Jackie 这是为了解决 OP 使用 vanilla JEE 而不是 GORM 的问题。我不知道问题的真正解决方案是否已经确定。
  • 您能否提供类的包名称我仍然遇到编译错误。出于某种原因,它不喜欢用逗号分隔两者。
猜你喜欢
  • 1970-01-01
  • 2012-03-19
  • 1970-01-01
  • 2015-06-01
  • 1970-01-01
  • 2010-11-15
  • 2014-11-29
  • 2017-04-04
  • 1970-01-01
相关资源
最近更新 更多