0

我是 JAVA 和 JPA 的新手。我使用命令

select * from asm.attendant where staff_no='0004' and node_code='KT1' and date(attendant_date) = '2013-05-13';

在 MySQL 中它的工作

当我在 JPA 中使用时

    public List<Attendant> listAttendantByStaffNoAndNodeCodeAndDateWs(String staffNo,String nodeCode,String attendantDateData) throws ParseException {

    Date attendantDate = new SimpleDateFormat("yyyy-MM-dd").parse(attendantDateData);

    Query result =  em.createQuery("SELECT a FROM Attendant a WHERE a.staffNo = :staffNo AND a.nodeCode = :nodeCode AND DATE(a.attendantDate) = :attendantDate", Attendant.class);
    result.setParameter("staffNo", staffNo);
    result.setParameter("nodeCode", nodeCode);
    result.setParameter("attendantDate", attendantDate);
    return result.getResultList();
}  

这是行不通的。

错误

引起:异常 [EclipseLink-8025] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.JPQLException 异常描述:解析查询的语法错误 [SELECT a FROM Attendant a WHERE a.staffNo = :staffNo AND a.nodeCode = :nodeCode AND DATE(a.attendantDate) = :attendantDate],第 1 行,第 88 列:意外令牌 [(]。内部异常:NoViableAltException(83@[()* loopback of 383:9 : (d= DOT right= 属性)*])

4

1 回答 1

2

DATE() 不是有效的 JPQL。在 JPA 中 createQuery() 采用 JPQL 而不是 SQL。如果你想要 SQL 使用 createNativeQuery()。

Or, in JPQL just mark the date as a parameter :date any set the parameter to your instance of java.sql.Date.

于 2013-05-15T13:47:36.563 回答