2012-07-13 52 views
0

我從表中創建實體。這是我的員工實體。openJPA日期格式

類的Emp { 串ID, java.sql.date joinDate }

正如我看到TO_DATE()是不適用在JPA,如何可以持續接合日期相同的格式2010-12 -25T12:00:00通過使用jpa進入數據庫。

我該如何指定這種格式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(名稱= 「getEmployeeByDate」,查詢= 「?選擇的Emp p p,其中p.joinDate =」 )

回答

1

我們無法直接在數據庫中保存日期值「2010-12-25T12:00:00」,所以我們必須使用SimpleDateFormat的解析方法將其轉換爲日期時間。藉助parse方法您可以獲取日期時間值。然後您可以將該值存儲到類型爲TimeStamp的列。

對於Retrieval值,將值作爲dateTime,然後使用java.text包中的simpledatformat類的格式方法格式化該值。

+0

即使我使用SimpleDateFormat或其他任何,openJPA顯示相同的格式,如「Fri Jul 06 00:00:00 EDT 2012」。我只想擁有「Jul-06-2012」(沒時間)。在persistence.xml中有一個參數可以做到這一點嗎? – 2012-07-13 04:25:00

1

分析

您正在混合數據的存儲方式和數據預覽方式。數據庫不關心格式,用戶確實。

使用TemporalType在數據庫中存儲日期,有三種形式:日期,時間和時間戳。 YYYY-MM-DD,YYYY-MM-dd'T'HH:毫米:使用DateFormat

預覽日期,以用戶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 <= ?") 
0

要直接保存日期在數據庫中的Java6引進時間戳類(java.sql.Timestamp)。

首先與

類的Emp {串ID,時間戳joinDate}

現在你可以用你想要使用format的setdate(設置joinDate)更換你的實體,setHour().. 。方法來指定你的時間,這將直接被SQL TIMESTAMP接受。