【问题标题】:TimestampType set override errorTimestampType 设置覆盖错误
【发布时间】:2014-01-30 16:44:37
【问题描述】:

我正在尝试创建自己的 Hibernate 映射以使用 Hibernate 读取和写入 UTC 时间戳到 DB,因此我正在扩展 Hibernate TimestampType 类,如下所示,但我总是收到以下错误。那么有人可以告诉我我在这里做错了什么吗?感谢您的宝贵时间。

此行有多个标记 - UTCTimestampType 类型的方法 set(PreparedStatement, Object, int) 必须覆盖或实现超类型方法 - 名称冲突:UTCTimestampType 类型的方法 set(PreparedStatement, Object, int) 与 set(PreparedStatement, T, int) 类型为 AbstractSingleColumnStandardBasicType 但不是 覆盖它

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, Object 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());
        }   
}

【问题讨论】:

  • 您是否在某个课程中扩展了UTCTimestampType
  • @JigarJoshi 不,因为我什至无法首先编译 UTCTimestampType
  • 你能在你的questino上发布hibernate版本和jdk版本吗
  • @JigarJoshi 我在我的应用程序和 JDK 7 中使用 hibernate-core-3.6.0.Final.jar

标签: java hibernate


【解决方案1】:

查看 TimestampType 的 Java 文档:

TimestampType 它扩展了

AbstractSingleColumnStandardBasicType<Date>

方法签名是set(PreparedStatement st, T value, int index) 不带Object

试试:

@Override
        public void set(PreparedStatement st, Date value, int index)
                    throws SQLException{...

【讨论】:

  • 感谢您的回复。好吧,这解释了错误,因为我使用的是 Hibernate 3.6 jar,而此代码更多用于 Hibernate 3.5...请最后一个问题...不会将 Object 更改为 Date 给自定义映射读取和写入 UTC 带来麻烦我的问题中提到的使用 Hibernate 的 DB 时间戳?
  • 无法回答第二个问题。你必须尝试一下。由于 TimestampType 扩展 AbstractSingleColumnStandardBasicType 类型(T)是 Date,所以我认为它不会引起问题。
  • 您可以尝试使用 T: public void set(PreparedStatement st, T value, int index) 覆盖它。不确定它是否会起作用。
  • 这不适用于最新的 Hibernate 5.2.9Final。 “UTCTimestampType 类型的方法 get(PreparedStatement, Date, int) 必须重写或实现超类型方法”。
猜你喜欢
  • 1970-01-01
  • 2023-01-09
  • 2011-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多