Получение QuerySyntaxException: неожиданный токен

0

Да, я знаю, что есть несколько сообщений об этой ошибке, но ни один из них не помог мне. Я получаю эту ошибку для моего запроса hql:

@SuppressWarnings("unchecked")
@Override
public List<StaffRequest> getStaffLeaveRequest(String userID, Date startDate, Date endDate) 
{
    Session currentSession = sessionFactory.getCurrentSession();        

    List<StaffRequest> results = 
    currentSession.createQuery("select new com.timesheet_Webservice.CustomEnity.StaffRequest(lr.leave_ID, lr.leave_Employee, concat(s.staff_First_Name, ' ', s.staff_Last_Name), "
            + "(lr.leave_Days*8.5), lr.leave_Comments, '1805', concat(pro.project_Pastel_Prefix, ' - ', pro.project_Description), lr.leave_Start, lr.leave_End, lr.leave_IsApproved, "
            + "(select lt.leaveType_Description from LeaveType lt where lt.leaveType_ID = lr.leave_Type)) "
            + "from Staff s, Leave lr, Project pro "
            + "where lr.leave_Employee, = s.staff_Code and pro.project_Code = 1805 and lr.leave_Approved = :userID, and lr.leave_IsApproved = 0 and s.staff_IsEmployee <> 0 "
            + "and lr.leave_Start between :startDate and :endDate "
            + "order by concat(s.staff_First_Name, ' ', s.staff_Last_Name)")
                                .setParameter("userID",userID).setParameter("startDate", startDate).setParameter("endDate", endDate).getResultList();   

    return results;
}

Я не могу понять, в чем проблема. Я попытался тщательно перепечатать запрос, попытался следовать формату некоторых из моих похожих запросов, но ничего не получилось. Пожалуйста помоги

ОБНОВЛЕНИЕ: Полная ошибка следующая после исправления от @Joakim Danielson

{"status":400,"message":"org.hibernate.hql.internal.ast.QuerySyntaxException: 
            unexpected token: , near line 1, column 665 [select new com.timesheet_Webservice.CustomEnity.StaffRequest(lr.leave_ID, lr.leave_Employee, concat(s.staff_First_Name, ' ', s.staff_Last_Name),
         (lr.leave_Days*8.5), lr.leave_Comments, '1805', concat(pro.project_Pastel_Prefix, ' - ', pro.project_Description),
    lr.leave_Start, lr.leave_End, lr.leave_IsApproved, (select lt.leaveType_Description from com.timesheet_Webservice.entity.LeaveType lt where lt.leaveType_ID = lr.leave_Type)) from com.timesheet_Webservice.entity.Staff s,
    com.timesheet_Webservice.entity.Leave lr, com.timesheet_Webservice.entity.Project pro where lr.leave_Employee = s.staff_Code and pro.project_Code = 1805 and lr.leave_Approved = :userID, 
and lr.leave_IsApproved = 0 and s.staff_IsEmployee <> 0 and lr.leave_Start between :startDate and :endDate order by concat(s.staff_First_Name, ' ', s.staff_Last_Name)]","timeStamp":1548935385459}
  • 0
    Что такое точная ошибка и где в запросе это указывает?
  • 0
    добавил полную ошибку. Как можно проследить, что столбец строки 1 указывает на то, куда он указывает?
Теги:
hibernate
hql

1 ответ

1
Лучший ответ

"где lr.leave_Employee, = s.staff_Code", удалите запятую

where lr.leave_Employee = s.staff_Code

у вас есть вторая ошибка запятой в "lr.leave_Approved =: userID,"

lr.leave_Approved = :userID

Обратите внимание, что в вашем сообщении об ошибке у вас есть unexpected token:, near line 1, column 665 поэтому, если вы вставите запрос, напечатанный в сообщении об ошибке, в текстовый редактор и удалите разрывы строк и лишние пробелы, вы найдете ошибку в столбце (или положение, если хотите) 665.

Не по теме, но могу ли я предложить вам узнать об использовании JOIN в ваших запросах, это значительно улучшает читабельность

  • 0
    Действительно думал, что это конец моих неприятностей, но все равно получаю ошибку. Спасает меня исправить на потом, хотя спасибо. я посмотрю
  • 0
    @DeanStrydom, еще одна запятая для многих
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню