猿问

错误 org.hibernate.exception.SQLGrammarException:

我有我正在执行的 hql 查询,但收到一个我不太了解原因的错误。


这是我的代码:


@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.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;

    ...

}


红颜莎娜
浏览 119回答 3
3回答

守候你守候我

1)当您使用java.util.DateforLeave.leave_Start时,您应该使用适当的@Temporal值进行注释:@Temporal(TemporalType.TIMESTAMP) @Column(name="Leave_Start") Date&nbsp;leave_Start;2)设置查询日期参数时,尝试使用:.setDate("startDate",&nbsp;startDate)或者.setParameter("startDate",&nbsp;startDate,&nbsp;TemporalType.TIMESTAMP)

慕村9548890

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

慕码人2483693

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

相关分类

Java
我要回答