Hibernate текущая дата не работает - PullRequest
0 голосов
/ 24 августа 2011

Я переписал этот вопрос, чтобы прояснить.

У меня есть такая сущность:

@Entity
@NamedQueries({
    @NamedQuery(
        name = "myObj.findCurrentUsingFunction", 
        query = "from MyObj where insertDate = current_date() "),

    @NamedQuery(
        name = "myObj.findCurrentUsingParameter", 
        query = "from MyObj where insertDate = :currentDate")
})

public class MyObj {
    @Id @GeneratedValue @Column
    private Long id;

    @Column @Temporal(TemporalType.DATE)
    private Date insertDate;

    /* getter, setter */
}

У меня тест на неудачу:

@Test
public void findCurrentUsingFunction() throws Exception {
    final MyObj myObj = new MyObj();
    myObj.setInsertDate(new Date());
    final Session session = dao.getSessionFactory().getCurrentSession();
    session.saveOrUpdate(myObj);
    final Query namedQuery = 
        session.getNamedQuery("myObj.findCurrentUsingFunction");
    final List results = namedQuery.list();
    Assert.assertEquals("size",1L, (long) results.size());
}

Hibernate: выберите hibernate_sequence.nextval из двойного Hibernate: вставить в MyObj (insertDate, id) значения (?,?) Hibernate: выбрать myobj0_.id как id0_, myobj0_.insertDate как insertDate0_ из MyObj myobj0_, где myobj0_.insertDate = current_date

java.lang.AssertionError: ожидаемый размер: <1>, но был: <0>

и прохождение теста

@Test
public void findCurrentUsingParameter() throws Exception {
    final MyObj myObj = new MyObj();
    myObj.setInsertDate(new Date());
    final Session currentSession = dao.getSessionFactory().getCurrentSession();
    currentSession.saveOrUpdate(myObj);
    final Query namedQuery =
        currentSession.getNamedQuery("myObj.findCurrentUsingParameter");
    namedQuery.setDate("currentDate", new Date());
    final List results = namedQuery.list();
    Assert.assertEquals("size",1L, (long) results.size());
}

диалект:

hibernate.dialect = org.hibernate.dialect.Oracle10gDialect

1 Ответ

5 голосов
/ 24 августа 2011

Вы используете функцию sql внутри оператора HSQL, поэтому она не работает.Либо снимите скобки, чтобы использовать функцию current_date гибернации, например:

@NamedQuery(
    name = "entity.findCurrent", 
    query = "from EntityName where insertDate = current_date")

Или я бы сделал это так (на самом деле я бы также использовал joda-time для создания моегопеременная datetime currentDate)

@NamedQuery(
    name = "entity.findCurrent", 
    query = "from EntityName where insertDate = :currentDate")

Затем введите дату, когда вы вызываете именованный запрос

session.getNamedQuery(findCurrent).setDate("currentDate", currentDate); 

или вы можете использовать critiera .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...