0

我从表中创建了实体。这是我的员工实体。

类 Emp{ String id, java.sql.date joinDate }

正如我所见,to_date() 在 JPA 中不适用,如何使用 jpa 以相同的格式 2010-12-25T12:00:00 将加入日期保存到数据库中。

我如何指定这种格式 yyyy-MM-dd'T'HH:mm:ss。

稍后我想搜索以 (yyyy-mm-dd) 2010-12-25 格式加入的 emp,以便我可以从数据库 2010-12-25T12:00:00 2010-12 中获取所有值-25T11:00:00 2010-12-25T10:05:00

@NamedQuery(name="getEmployeeByDate",query="select p from Emp p where p.joinDate =?")

4

3 回答 3

1

我们无法将日期值“2010-12-25T12:00:00”直接保存在数据库中。所以我们必须使用 SimpleDateFormat 的 parse 方法将其转换为日期时间。借助 parse 方法可以获取日期时间值。然后您可以将该值存储到类型为时间戳的列中。

对于检索值,获取值作为日期时间,然后使用 java.text 包中的 simpledatformat 类的格式方法格式化值。

于 2012-07-13T02:25:57.410 回答
1

分析

您正在混合存储数据的方式和预览数据的方式。数据库不关心格式,用户关心。

使用TemporalType将日期存储在数据库中,有三种形式:日期、时间和时间戳。

使用DateFormat向用户预览日期:yyyy-MM-dd、yyyy-MM-dd'T'HH:mm:ss 等。

通过删除 date 的不必要部分,按给定日期的任何部分(忽略格式)查询数据库。

解决方案

您需要两个日期,一个代表今天的 00:00 和明天的 00:00,这将涵盖一天 24 小时。从两个日期中删除时间并将它们传递给查询:

Date fromTimestamp = new Date();
Date toTimestamp = new Date();
Date fromDate = DateHelper.getDateWithoutTime(fromTimestamp);
Date toDate = DateHelper.getDateWithoutTime(
                    DateHelper.getTomorrowDate(toTimestamp));

//DateHelper.java
public static Date getDateWithoutTime(Date date) {
    Calendar cal = Calendar.getInstance();
    cal.setTime(date);
    cal.set(Calendar.HOUR_OF_DAY, 0);
    cal.set(Calendar.MINUTE, 0);
    cal.set(Calendar.SECOND, 0);
    cal.set(Calendar.MILLISECOND, 0);
    return cal.getTime();
}

public static Date getTomorrowDate(Date date) {
    Calendar cal = Calendar.getInstance();
    cal.setTime(date);
    cal.add(Calendar.DATE, 1);
    return cal.getTime();
}

更新您的查询以使用两个参数:

@NamedQuery(name="getEmployeeByDate",
    query="select p from Emp p where p.joinDate >= ? and p.joinDate <= ?") 
于 2012-07-13T06:14:14.520 回答
0

要将日期直接保存在数据库中 JAVA6 引入了 TimeStamp 类(java.sql.Timestamp)。

首先将您的实体替换为

类 Emp{ String id, TimeStamp joinDate }

现在您可以使用 setdate(), setHour()... 方法以您想要的格式设置 joinDate 来指定您的时间,这将被 SQL TIMESTAMP 直接接受。

于 2013-07-02T11:21:15.690 回答