GORM:如何将Interval映射到列?

时间:2013-09-09 13:18:50

标签: hibernate grails gorm jodatime

我有一个类似于下面一个使用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

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

1 个答案:

答案 0 :(得分: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的优点......但暂时可能是一个有效的解决方案。