java - 使用 Joda 和 Hibernate 保留 IS08601 日期格式

标签 java hibernate jodatime

我试图保留应用程序用户以 ISO8601 格式输入的日期,因此我构建了一个自定义 Hibernate 映射类,如下所示:

public class UTCTimestampType extends org.hibernate.type.TimestampType{ 
    @Override
    public Object get(ResultSet rs, String name) throws SQLException {
        return rs.getTimestamp(name, createUTCCalendar());
    }
    private static Calendar createUTCCalendar() {
        final Calendar c = Calendar.getInstance();
        c.setTimeZone(new SimpleTimeZone(0, "UTC"));
        return c;
    }
    @Override
    public void set(PreparedStatement st, Date value, int index)
            throws SQLException{
        Timestamp ts;
        if (value instanceof Timestamp) {
            ts = (Timestamp) value;
        } else {
            ts = new Timestamp(((java.util.Date)value).getTime());
        }
        st.setTimestamp(index, ts, createUTCCalendar());
    }   
}

然后在我的实体类中,我定义了日期字段,如下所示:

    @Type(type="com.domainname.empmgmt.common.util.UTCTimestampType")
@Column(name="DOB",nullable=false,unique=false)
private DateTime dob;

当我尝试使用以下代码从 Controller 保存日期时:

DateTimeZone timeZone = DateTimeZone.forID( "Asia/Hong_Kong" );
DateTimeFormatter formatter = DateTimeFormat.forPattern( "MM/dd/yyyy" ).withZone( timeZone );
String input = "05/05/2013"; //For testing...
DateTime dateTime = formatter.parseDateTime( input );
employee.setDob(dateTime);

我收到以下错误:

HTTP Status 500 - Request processing failed; nested exception is java.lang.ClassCastException: org.joda.time.DateTime cannot be cast to java.util.Date

我不确定为什么自定义映射不起作用,因为错误显示 Hibernate 仍然将该字段视为 java.util.Date 而不是 DateTime,所以有人可以告诉我我在这里做错了什么以及如何解决解决这个问题吗?

谢谢

最佳答案

您的自定义类型 set() 方法需要保留日期作为值:

public void set(PreparedStatement st, Date value, int index)

但是您的字段属于 DateTime 类型,它不会扩展 Date。显然,这是行不通的。

关于java - 使用 Joda 和 Hibernate 保留 IS08601 日期格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21510060/

相关文章:

java - 仅提取 Java Spark 中的某些列

java - java中的csv文件的电子邮件验证

java - 警告 :oejuc. 抽象生命周期 :FAILED?

java - JPA - 复合 key 识别中的关系

java - JAX-WS 和 Joda-Time?

java - Jodatime 日期格式

java - 对客户端和服务器端验证使用相同的逻辑

hibernate - HQL JoinTable 无法访问

java - Hibernate 4 和 5 的 db2 中序列 SQL 的差异

jodatime - 在 Mirth 中使用 joda 时间日期时间格式化程序的正确格式是什么?