2012-07-13 2 views
0

테이블에서 엔티티를 생성했습니다. 여기에 내 직원 엔티티가 있습니다.openJPA 날짜 형식

클래스 EMP를 { 문자열 ID, java.sql.date joinDate }

내가 TO_DATE()는 내가 같은 형식 2010-12에 결합 된 날짜를 유지할 수있는 방법, JPA에 적용되지 않습니다시피 -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.joinDate =")

답변

1

데이터베이스에 직접 "2010-12-25T12 : 00 : 00"날짜 값을 저장할 수 없습니다. 따라서 우리는 SimpleDateFormat의 구문 분석 메소드를 사용하여 날짜 시간으로 변환해야합니다. 구문 분석 메소드의 도움을 받아야합니다 당신은 날짜 값을 얻을 수 있습니다. 그럼 당신은 그 값을 저장할 수 있습니다. TimeStamp 형을 가지는 열

값을 가져 오려면 값을 dateTime으로 가져온 다음 java.text 패키지의 simpleedatternat 클래스의 형식 메서드를 사용하여 값의 형식을 지정하십시오.

+0

심지어 SimpleDateFormat 등을 사용하는 경우에도 openJPA는 "Fri Jul 06 00:00:00 EDT 2012"와 같은 형식으로 표시됩니다. 나는 단지 "Jul-06-2012"(시간 없음)을 갖고 싶다. persistence.xml에 매개 변수가 있습니까? –

1

분석

데이터 저장 방법과 데이터 미리보기 방법을 혼합합니다. 데이터베이스는 서식 지정에 신경 쓰지 않습니다.

TemporalType을 사용하여 데이터베이스에 날짜를 저장하면 날짜, 시간 및 타임 스탬프의 세 가지 형식이 있습니다. YYYY-MM-DD, YYYY-MM-dd'T'HH : mm : DateFormat 사용하여 사용자에게

미리 날짜하여 주어진 날짜의 부분 등에 의해 SS,

쿼리 데이터베이스 (형식을 무시하고)에 의해 removing unnecessary parts of date. 당신은이 날짜가 필요

솔루션, 하나는 24시간 일을 포함 할, 00:00 00:00 내일 오늘을 나타냅니다. 두 날짜에서 시간을 제거하고 조회하는 패스 :

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

는 타임 스탬프 클래스 (java.sql.Timestamp)을 소개 데이터베이스 JAVA6에서 직접 날짜를 저장합니다.

는 첫째

클래스 EMP를 {문자열 ID, 타임 스탬프 joinDate}

지금 당신이 원하는 형식을 사용하여 setDate (과 joinDate을 설정할 수 있습니다)로 법인을 교체 setHour() .. . 시간을 지정하는 메소드. SQL TIMESTAMP에 의해 직접 승인됩니다.