我从表中创建了实体。这是我的员工实体。
Class Emp { 字符串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 =“从Emp p中选择p,其中p.joinDate =?”)
答案 0 :(得分:1)
我们无法直接在数据库中保存日期值“2010-12-25T12:00:00”。因此我们必须使用SimpleDateFormat的parse方法将其转换为日期时间。借助parse方法,您可以获取日期时间值。然后,您可以将该值存储到类型为TimeStamp的列中。
对于Retrieval值,将值作为dateTime获取,然后使用java.text包中的simpledatformat类的format方法格式化值。
答案 1 :(得分:1)
您正在混合数据的存储方式和数据预览方式。数据库并不关心格式化,用户会这样做。
使用TemporalType在数据库中存储日期,有三种形式:日期,时间和时间戳。
使用DateFormat向用户预览日期:yyyy-MM-dd,yyyy-MM-dd'T'HH:mm:ss等。
按removing unnecessary parts of 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 <= ?")
答案 2 :(得分:0)
要将日期直接保存在数据库中,JAVA6引入了TimeStamp类(java.sql.Timestamp)。
首先用
替换你的实体Class Emp {String id,TimeStamp joinDate}
现在,您可以使用setdate(),setHour()...方法将joinDate设置为所需的格式,以指定您的时间,这将由SQL TIMESTAMP直接接受。