error org.hibernate.exception.sqlgrammareexception:无法提取结果集

fsi0uk1n  于 2021-07-09  发布在  Java
关注(0)|答案(3)|浏览(365)

我有我正在执行的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.sqlgrammareexception:无法提取结果集
还有这个控制台错误:
错误:您的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;
    ...
}
dba5bblo

dba5bblo1#

1) 当你使用 java.util.Date 为了 Leave.leave_Start ,你应该用适当的注解 @Temporal 价值:

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

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

.setDate("startDate", startDate)

或者

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

juud5qan2#

好的,经过多次测试,我发现了错误的原因。由于某种未知的原因,查询似乎在引用表'leave'的名称上有问题,每当我试图从中检索数据时,都会产生错误。但是,如果我将表重命名为像“leaves”这样简单的名称,那么查询将成功执行。谁都知道为什么会这样?

qxgroojn

qxgroojn3#

显然,jpa遵循变量名的一些规则或惯例,不接受“\”,出于某种原因不接受中间大写字母。。。它通过将所有变量改为小写来为我工作

相关问题