2017-10-18 12 views
0

다음과 같은 방법으로 날짜를 전달하려고했지만 성공하지 못했습니다. dateAnswered는 날짜를 2017-09-13 00:00:00으로 저장하는 필드입니다. 내가 잘못 무엇입니까 곳Hibernate Named Query (HQL)을 사용하여 MYSQL의 Timestamp 필드에서 현재 날짜를 검색하는 방법은 무엇입니까?

누구는 말할 수 :

방법 1 : setParameter를을

@NamedQuery(name = "findAnswar", query = "SELECT a FROM Answar a WHERE (a.dateAnswered = :currentDate)" 

Try 1: 
super.em.createNamedQuery("findAnswar" , Answar .class).setParameter("currentDate", new Date()); //Not receive any data 

Try 2: 
Date date = new Date(); 
date.setHours(0); 
date.setMinutes(0); 
date.setSeconds(0); 
super.em.createNamedQuery("findAnswar" , Answar .class).setParameter("currentDate", date) //Not receive any data 

방법 2 : 설정 붙박이 매개 변수

에도 유래의 이전 답변에서
@NamedQuery(name = "findAnswar", query = "SELECT a FROM Answar a WHERE (a.dateAnswered = current_date())") //NOT WORKS 

It works if i do add Temporal to getter: 

@Column(name = "DATE_ANASWERED") 
@Temporal(TemporalType.DATE) 
public Date getDateAnswered() { 
    return dateAnswered ; 
} 

BUT IT GIVES another issue : Caused by: org.hibernate.HibernateException: Wrong column type in db.ANSWAR for column DATE_ANASWERED. Found: datetime, expected: date 

@NamedQuery(name = "findAnswar", query = "SELECT a FROM Answar a WHERE (a.dateAnswered = current_date)") //NOT WORKS - JPA errors 

내가 아니다 관련 솔루션을 찾을 수 있습니다. 누구든지 명명 된 쿼리만을 사용하여 동일한 문제를 해결할 수 있습니까?

+0

첫 번째 예에서 표시되는 오류 메시지는 무엇입니까? – olegsv

+0

@olegsv 아무런 데이터도받지 못했습니다 .. – Harpreet

답변

0

명명 된 질의에 다음과 같이 변경하고 그것을 달성 할 수 그것은 마법처럼 일했다 : 기본 유형이 날짜가

"SELECT a FROM Answar a WHERE cast(a.dateAnswered as date) = current_date() 

으로 그래서 current_date()를 사용하려면 현재까지 캐스팅해야합니다.

0

일시적 유형을 지정해야합니다.

방법 1

super.em.createNamedQuery("findAnswar", Answar.class) 
    .setParameter("currentDate", new Date(), TemporalType.TIMESTAMP); 

방법이

@Column(name = "DATE_ANASWERED") 
@Temporal(TemporalType.TIMESTAMP) 
    public Date getDateAnswered() { 
    return dateAnswered ; 
} 
+0

매우 유망한 표정을 지어 주셔서 감사합니다. 그러나 기본 빈이 @Column (name = "ANTAS_AVSLUTTES")이므로 작동하지 않았습니다. public Date getDateAnswered() {return dateAnswered; } 그리고 MYSQL에서 DateTime 데이터 유형이기 때문에이 엔티티에서 TemporalType을 언급 할 수 없습니다. – Harpreet

+0

위의 주석을 편집 할 수 없습니다. 미안합니다. 열 이름은 @Column (name = "DATE_ANASWERED")입니다. – Harpreet

+0

오케이 제 실수로 TemporalType은 DateTime 데이터 유형에 따라 TIMESTAMP가되어야합니다. – Tom