为了账号安全,请及时绑定邮箱和手机立即绑定

错误 org.hibernate.exception.SQLGrammarException:

错误 org.hibernate.exception.SQLGrammarException:

红颜莎娜 2022-06-04 11:03:05
我有我正在执行的 hql 查询,但收到一个我不太了解原因的错误。这是我的代码:@Overridepublic List<StaffRequest> getStaffLeaveRequest(String userID, Date startDate, Date endDate) {    Session currentSession = sessionFactory.getCurrentSession();            List<StaffRequest> results =     currentSession.createQuery("select new com.timesheet_Webservice.CustomEntity.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, Project pro, Leave lr "            + "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;}尝试执行时,我在网页上收到此错误:org.hibernate.exception.SQLGrammarException:无法提取 ResultSet还有这个控制台错误:错误:您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以在第 1 行的“离开 leave2_ where leave2_.Leave_Employee=staff0_.Staff_Code and project1_.Proj”附近使用正确的语法这似乎表明 where 子句有一些错误,但我没有看到任何特别错误的地方。更新: 实体类项目@Entity@Table(name="project")public class Project {    @Id    @GeneratedValue(strategy=GenerationType.IDENTITY)    @Column(name="Project_Code")    public int project_Code;    @Column(name="Project_Customer")    public int project_Customer;    //A lot more attributes...}职员@Entity@Table(name="staff")public class Staff {    @Id    @Column(name="Staff_Code")    public String staff_Code;    ...}
查看完整描述

3 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

1)当您使用java.util.DateforLeave.leave_Start时,您应该使用适当的@Temporal值进行注释:

@Temporal(TemporalType.TIMESTAMP)
@Column(name="Leave_Start")
Date leave_Start;

2)设置查询日期参数时,尝试使用:

.setDate("startDate", startDate)

或者

.setParameter("startDate", startDate, TemporalType.TIMESTAMP)


查看完整回答
反对 回复 2022-06-04
?
慕村9548890

TA贡献1884条经验 获得超4个赞

显然,JPA 遵循变量名称的一些规则或约定,不接受“_”,并且由于某种原因不接受中间大写字母......它通过将所有变量更改为小写字母对我有用



查看完整回答
反对 回复 2022-06-04
?
慕码人2483693

TA贡献1860条经验 获得超9个赞

好的,经过多次测试,我发现了错误的原因。由于某些未知原因,查询似乎与引用表“离开”的名称有问题,并且每当我尝试从中检索数据时都会产生错误。但是,如果我将表重命名为“leaves”之类的简单名称,则查询将成功执行。任何人都可能知道这是为什么?



查看完整回答
反对 回复 2022-06-04
  • 3 回答
  • 0 关注
  • 118 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信