문제

내가 수행하려는 시간을 데이터 작업이 최대 절전 모드를 사용하여 조회.

를 추가하려면 빼기 두 날짜뿐만 아니라 내가 원하는 빼기 1 년 또는 1 개월에서 특정 날짜입니다.

이것은 어떻게 사용하여 가능한 조회에서는 최대 절전 모드?

도움이 되었습니까?

해결책

보다HQL에서 날짜/시간 수학 수행?예를 들어.

맞춤형 SQL을 사용하려면 자체 최대 절전 모드 방언을 작성하고 등록해야합니다.

registerFunction("weekday", 
  new SQLFunctionTemplate(Hibernate.INTEGER, "to_char(?1,'D')") );

다른 팁

자신만의 방언을 만들어야합니다. 다음과 같은 것 :

public class MyDialect extends MySQLInnoDBDialect{
      public myDialect() {
      super();
      registerFunction("date_add_interval", new SQLFunctionTemplate(Hibernate.DATE, "date_add(?1, INTERVAL ?2 ?3)"));
      }
    }

최소한 Hibernate/MySQL에서는 UNIX 타임 스탬프로 오지서 변환 할 수 있습니다. UNIX 타임 스탬프는 정수이므로 정수 수를 추가 할 수 있습니다.

FROM_UNIXTIME(UNIX_TIMESTAMP(date)+ (allowedTimeWindow*86400)) as deadline

제한 사항이 있지만 위의 접근 방식보다 훨씬 쉽습니다.

이것은 오픈 문제에 왔습니다.로 최대 절전 모드 3.3 표준 방법이 없을 처리하는 날짜를 비교 순서 조회:

https://hibernate.atlassian.net/browse/HHH-2434

Hibernate4.3 는 기능을 제공하여 액세스한 날짜/시간에 조회는:

current_timestamp() , current_date() , current_time()

연산여 관리 할 수 있습니다:

SECOND(...) , MINUTE(...) , HOUR(...) , DAY(...) , MONTH(...) , YEAR(...)

면책 조항 : 저는 Java 초보자입니다

나는 사용할 수 있었다 current_date() >= fromDate AND dateadd(day, -1, getdate()) <= toDate 기능을 등록하지 않고 Hibernate 3.5.3의 Sybase DB에 대한 HQL 문에서.

JPA + Hibernate 4.3.1 + mysql 5에 대한 방언이있는 접근 방식의 사용 샘플

공개 클래스 samplemysql5innodbdialect 확장 org.hibernate.dialect.mysql5innodbdialect {

public SampleMySQL5InnoDBDialect() {
    super();
    registerFunction("date_sub_days", new SQLFunctionTemplate(StandardBasicTypes.DATE, "date_sub(?1, interval ?2 day)"));
}

그런 다음 매핑 주석이있는 수업의 경우 :

@NamedQuery(name = "SampleEntity.getSampleEntitiesForGapOverlapCalculations", query = "from SampleEntity as se where "
    + "((se.toDate between :startDate and :endDate) or (date_sub_days(se.toDate, se.duration) between :startDate and :endDate)) order by se.toDate asc, se.duration desc")

샘플 가지다 토데이트 유형의 필드 java.sql.date 및 지속 정수 필드 (일 기간) 그리고 우리는 계산 중입니다. Fromdate = Todate- 시간 그리고 모든 엔터티를 선택합니다 Fromdate 또는 토데이트 내부 간격 startDate, endDate.

Hibernate4.3은 날짜/타임 스탬프에 액세스하고 산술 작업을 수행하기위한 기본 기능을 제공합니다.

여기 HQL에서 어떤 표현식을 사용할 수 있는지에 대한 문서화에 대한 링크입니다. 내가 언급하는 몇 가지 : 액세스 날짜/시간 :

current_date(), current_time(), and current_timestamp()

산술 작업은 다음을 통해 수행 할 수 있습니다. 이러한 기능은 입력으로 시간이 걸립니다.

second(...), minute(...), hour(...), day(...), month(...), and year(...)

HQL의 절대적인 차이를 얻을 수 있습니다

current_timestamp() - dateInstance

DateInstance가 정의를 가질 수있는 곳

@Column(name = "updated_at")
@Temporal(TemporalType.TIMESTAMP)
private java.util.Date updatedAt;

결과는 0.1 초입니다. 따라서 1 초의 절대적인 차이의 경우 위의 표현식은 결과를 10으로 제공합니다.

따라서 쿼리는 다음과 같습니다.

select t from Table t where (current_timestamp() - updatedAt)>600

Postgres 사용자 ...

registerFunction("dateadd", new SQLFunctionTemplate(StandardBasicTypes.DATE, "(?1 + INTERVAL ?2)"));

SQL 사용법은 다음과 같습니다.

now() < dateadd(:mydate, '-1 day')
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top