【问题标题】:Correct Hibernate type for TimeDuration in grails/groovy domain class?grails/groovy 域类中 TimeDuration 的正确休眠类型?
【发布时间】:2011-10-17 14:16:16
【问题描述】:

在我的一个 Grails/Groovy 类中使​​用 TimeDuration 在启动 grails 应用程序时出现异常。

org.hibernate.MappingException: Could not determine type for: groovy.time.TimeDuration

在领域类中的使用

import groovy.time.TimeDuration
class Result {
    TimeDuration overall
}

我应该定义哪种类型?

【问题讨论】:

  • 间接回答:安装 joda plugin 并使用 Joda Durations。该插件会自动为您映射用户类型。
  • 我之前想过这个,但一开始想尝试不使用它。感谢您再次评论!
  • 没问题。从我看到的情况来看,您可能必须编写自己的 UserType 才能正确保留该字段。
  • 持久化由插件完成,效果很好。但是我还没有发现如何处理 joda-time 往返字符串!?
  • 如果您将评论添加为答案,我会将其标记为解决方案。

标签: hibernate grails groovy mapping


【解决方案1】:

由于您使用的是 Grails,因此使用 Joda Time plugin 及其 Duration 类型来存储您的值可能会更方便。

该插件在安装后会为许多库类型(包括 Duration)提供 Hibernate 映射。

如果您继续使用 Groovy 的 TimeDuration,您可能必须编写自己的 UserType;找了好几遍都没找到。

【讨论】:

    【解决方案2】:

    尝试使用Date。这将为数据库中的日期类型使用默认的“时间戳”。或者,您可以通过 hbm 文件/注释专门为您的日期字段配置其他格式的休眠。

    【讨论】:

    • 使用 static mapping = { overall type:'date' } 导致 DB 使用类型日期,这会导致错误 groovy.time.TimeDuration cannot be cast to java.util.Date 使用 timestamp 导致类似的错误。
    【解决方案3】:
    import groovy.time.TimeDuration
    
    class Result {
        Date overall
    }
    

    你可以使用这个Date类型来存储日期和时间,这个日期和时间会被hibernate映射到timestamp..

    【讨论】:

    • 我看不到日期/时间将如何存储像 30 分钟这样的时间量?!
    猜你喜欢
    • 2015-08-25
    • 2011-05-25
    • 2011-01-25
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    • 2016-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多