Java 날짜 최대 절전 모드 종료 시간
Oracle DB에 Date type 열이 있는데 날짜와 시간이 확실히 포함되어 있습니다.하지만 제가 자바 애플리케이션에서 데이터를 가져오려고 하면 실시간이 아닌 0으로 된 묶음으로 날짜를 반환합니다.코드에서는 다음과 같습니다.
SQLQuery sqlQuery = session.createSQLQuery("SELECT table.id, table.date FROM table");
List<Object[]> resultArray = sqlQuery.list();
Date date = (Date)resultArray[1];
DB에서 26-2-2010 17:59:16이었다면 26-2-2010 00:00:00 시간 내에 어떻게 해야 합니까?
다른 사람들이 이미 말했듯이, 당신은 다음을 사용해야 합니다.java.sql.Timestamp시간을 벌기 위해.
하지만, 만약 당신이 그것을 사용한다면.@Temporal(TemporalType.TIMESTAMP)Oracle의 DATE 열에 주석을 달면 Hibernate가 불만을 제기하고 스키마 유효성 검사 오류를 발생시킵니다.이러한 문제를 방지하려면 다음을 추가합니다.columnDefinition다음과 같이:
@Temporal(TemporalType.TIMESTAMP)
@Column(name="EVENTTIME", columnDefinition="DATE")
private Date eventTime;
Oracle에 대한 전문가는 아니지만, 고객이 필요로 할 수 있는DateTime타임스탬프를 가져올 열 유형입니다.
그것과 함께 당신은 사용해야 합니다.java.sql.TimestampJDBC 유형.
저도 같은 문제가 있었습니다(데이터베이스의 Oracle Date 유형).
다음 매핑은 저에게 적합합니다.
<property name="timeStamp" type="java.util.Date">
<column name="TIME_STAMP"/>
</property>
저도 과거에 이 문제에 직면한 적이 있습니다.이 문제를 해결하려면 다음에서 최대 절전 모드 매핑을 변경합니다.
<property name="timeStamp" type="java.util.Date">
<column name="TIME_STAMP"/>
</property>
로.
<property name="timeStamp" type="timestamp">
<column name="TIME_STAMP"/>
</property>
Hibernate 개체의 데이터 유형을 java.util로 유지할 수 있습니다.날짜.
네, 또한 잘 작동합니다. 3.3, ojdbc6.jar를 사용하고 주석에서 아래와 같이 날짜를 타임스탬프로 변경합니다.
@Id
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "TDATE", length = 7)
public Date getTdate() {
return this.tdate;
}
public void setTdate(Date tdate) {
this.tdate = tdate;
}
사용해 보십시오.
session.createSQLQuery("SELECT table.id as i, table.date as d FROM table")
.addScalar("i", Hibernate.LONG) // Or whatever type id is
.addScalar("d", Hibernate.TIMESTAMP);
혹시 이런 문제가 있나요?최신 JDBC 드라이버가 있는지 확인하십시오. 파일 이름은 ojdbc5.jar여야 합니다.
저는 최근에 같은 문제에 빠졌습니다.제 접근법은 이렇습니다...
따라서 이 경우 QueryImplementation 클래스에서 for 루프를 정의하여 데이터베이스 테이블의 모든 열의 유형을 확인합니다.열 이름이 DATE 유형이면 쿼리 작성기에 addScalar("columnName", 새 타임스탬프 유형()을 추가합니다.이러한 방식으로 날짜 유형 열은 Java 응용프로그램에 타임스탬프를 표시합니다.
아래 샘플 코드를 확인하십시오.
SQLQuery hibernateQuery = getSession().createSQLQuery(sqlQuery);
Set<String> columns = columnDataTypes.keySet();
for (String column : columns) {
if (columnDataTypes.get(column).equals(SqlType.DATE.name())) {
hibernateQuery.addScalar(column, new TimestampType());
} else {
hibernateQuery.addScalar(column);
}
}
이게 도움이 되길 바랍니다.
라케시.
조금 늦었을 수도 있지만, 저의 경우 해결책은 @Temporal(TemporalType)을 추가하는 것이었습니다.날짜 필드로 이동합니다.
@Temporal(TemporalType.DATE)
private Date date;
그리고 우리가 찾은 또 다른 해결책은 (첫 번째 해결책이 작동하지 않았을 때) 최대 절전 모드를 명시적으로 알려주는 것이었습니다.
@Type(type = "date")
private Date date;
언급URL : https://stackoverflow.com/questions/2343339/java-date-hibernate-cut-off-time
'programing' 카테고리의 다른 글
| dbms_scheduler.run_job('jobName)이(가) 실행되지 않음 (0) | 2023.07.27 |
|---|---|
| 텍스트 편집 코틀린에서 텍스트 설정 (0) | 2023.07.27 |
| How does Facebook show browser loading progress during AJAX Page Loads? (0) | 2023.07.27 |
| 버전 제어 시스템에 비밀 키와 암호를 안전하게 저장하려면 어떻게 해야 합니까? (0) | 2023.07.27 |
| C#을 사용하여 선행 0을 제거하는 방법 (0) | 2023.07.27 |