【问题标题】:persisting timestamp type only date without time仅保留时间戳类型的无时间日期
【发布时间】:2011-10-20 07:26:55
【问题描述】:

在我的数据库中,我只想保存没有时间的数据。 如果我使用 Calendar 或 Date 类型,我可以写:

@Column(name = "CDATE")
@Temporal(TemporalType.DATE)
Calendar cDate; // or Date cDate

但如果我想使用 Timestamp 数据类型,时间注释不使用时间戳类型:

@Column(name = "CDATE")
@Temporal(TemporalType.DATE)
Timestamp cDate;

我知道,使用 Timestamp 日期类型并不可取,但根据我的架构,我需要它。而且我不希望每次都将我的 cDate 中的分钟、小时和其他单位设置为零。 有什么办法解决吗。 附言我使用开放的 JPA 和 Oracle 数据库。

【问题讨论】:

    标签: java jpa


    【解决方案1】:

    在 Oracle 10 中,您只有 DATE 列类型,您可以通过在实体类上的列的注释中设置大小来确定类型,日期或时间戳

            @Temporal(TemporalType.TIMESTAMP)
        @Column(name = "START_DT", table="PART_DETL", nullable = false, length = 13)
        public Date getTbl1StartDt() {
            return this.tbl1StartDt;
        }
    

    对于约会,使用这个...

            @Temporal(TemporalType.DATE)
        @Column(name = "START_DT", table="PART_DETL"/*, nullable = false, length = 13*/)
        public Date getTbl1StartDt() {
            return this.tbl1StartDt;
        }
        public void setTbl1StartDt(Date tbl1StartDt) {
            this.tbl1StartDt = tbl1StartDt;
        }
    

    【讨论】:

    • kevin the kitten@ 为什么 DATE 可以为空,而 TIMESTAMP 是可延展的 = false
    【解决方案2】:

    如果您想保留没有时间组件的时间戳(我假设您只希望时间为 00:00:00),您需要将时间设置为零。

    它并不是一个出色的编程示例,但经过一番搜索后,我将给定的日期转换为日历并将小时/分钟/秒/毫秒设置为零。

    private Date stripTimeFromDate(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
    
        calendar.set(Calendar.HOUR_OF_DAY, 0);  
        calendar.set(Calendar.MINUTE, 0);  
        calendar.set(Calendar.SECOND, 0);  
        calendar.set(Calendar.MILLISECOND, 0);
    
        return calendar.getTime();
    }
    

    我使用它来去除查询的参数,以确保 between 语句的 'from' 和 'to' 参数不包含时间元素。

    据我所知,JPA 中没有任何注释可以满足您的需求。如果您设置的值没有在您的实体上保留时间组件,我认为您会没事的。

    【讨论】:

      猜你喜欢
      • 2021-11-10
      • 2022-07-02
      • 2016-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 2019-08-05
      相关资源
      最近更新 更多