Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
openJPA日期格式_Jpa_Jpa 2.0_Openjpa - Fatal编程技术网

openJPA日期格式

openJPA日期格式,jpa,jpa-2.0,openjpa,Jpa,Jpa 2.0,Openjpa,我从表中创建了实体。这是我的员工实体 类Emp{ 字符串id, java.sql.date连接日期 } 正如我看到的,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-1

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

类Emp{ 字符串id, java.sql.date连接日期 }

正如我看到的,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=?”

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

要检索该值,请将这些值作为dateTime,然后在java.text包中使用SimpleDataFormat类的format方法格式化该值。

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

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

使用:yyy-MM-dd、yyy-MM-dd'T'HH:MM:ss等向用户预览日期

按给定日期的任何部分(忽略格式)查询数据库

解决方案 您需要两个日期,一个代表今天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 <= ?") 
@NamedQuery(name=“getEmployeeByDate”,

query=“从Emp p中选择p,其中p.joinDate>=?和p.joinDate将日期直接保存在数据库JAVA6 improduct TimeStamp class()中

首先,将您的实体替换为

类Emp{String id,TimeStamp joinDate}


现在,您可以使用setdate(),setHour()…方法来设置joinDate与所需格式,以指定您的时间,该时间将被SQL时间戳直接接受。

即使我使用SimpleDataFormat或其他格式,openJPA也会以相同的格式显示,例如“Fri Jul 06 00:00:00 EDT 2012”。我只想要“Jul-06-2012”(无时间).persistence.xml中是否有一个参数可以执行此操作?