Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java antlr.NoViableAltException:意外标记、WHERE子句和意外标记_Java_Sql_Spring_Hibernate_Exception - Fatal编程技术网

Java antlr.NoViableAltException:意外标记、WHERE子句和意外标记

Java antlr.NoViableAltException:意外标记、WHERE子句和意外标记,java,sql,spring,hibernate,exception,Java,Sql,Spring,Hibernate,Exception,我已经搜索了与此相关的其他问题,但我刚刚意识到,可能是在我的查询中,可能是在hibernate中发生了此问题 看到where子句了吗,它还没有被调用 有什么问题吗 这是全部代码 试一试{ //逐个检查选择字段 String query=“选择emp.employeeID、emp.firstName、emp.middleName、emp.lastName、pos.positionName、dept.deptName、work.workplaceName” +“来自员工emp” +“内部加入部门”

我已经搜索了与此相关的其他问题,但我刚刚意识到,可能是在我的查询中,可能是在hibernate中发生了此问题

看到where子句了吗,它还没有被调用 有什么问题吗

这是全部代码 试一试{ //逐个检查选择字段 String query=“选择emp.employeeID、emp.firstName、emp.middleName、emp.lastName、pos.positionName、dept.deptName、work.workplaceName” +“来自员工emp” +“内部加入部门” +“在emp.departmentID=dept.deptID上” +“内部连接位置” +“在emp.positionID=pos.positionID上” +“内部连接工作场所工作” +“ON emp.workpaceid=work.workpaceid”

if(选中所有notempty(数据)){
query=query.concat(“WHERE”);
如果(data.getEmployeeID()!=null&&!data.getEmployeeID()等于(“”){
标准。添加(标准\员工ID 2);
System.out.println(“员工ID”);
输入_empID=true;
} 
如果(data.getEmployeeName()!=null&&!data.getEmployeeName()等于(“”){
add(nameCriteriaHelper(data.getEmployeeName());
System.out.println(“员工姓名AKOOO”);
输入_empName=true;
}
if(data.getDepartmentID()!=0){
标准。添加(标准部门);
系统输出打印项次(“部门ID”);
所选部门=真;
}
if(data.getPositionID()!=0){
标准。添加(标准位置);
系统输出打印项次(“POS ID”);
所选位置=真;
}
if(data.getWorkplaceID()!=0){
标准。添加(工作场所的标准);
所选工作=真;
}
query=query.concat(String.join(“或”,条件));
}
query=query.concat(“根据emp.joinDate DESC的订单”);
System.out.println(“查询:+QUERY”);
Query q=session.createQuery(查询);
如果(输入_empID){
q、 setParameter(“id”,“%”+data.getEmployeeID()+“%”);
}
if(输入_empName){
如果(按1搜索)
q、 setParameter(“inputName”,“%”+data.getEmployeeName()+“%”);
if(searchbyFandL)
q、 setParameter(“firstLastName”,“%%”+firstLastName+“%”);
如果(按公司名称搜索)
q、 setParameter(“completeName”、“%”+completeName+“%”);
}
如果(所选部门){
q、 setParameter(“deptID”,data.getDepartmentID());
}
如果(所选位置){
q、 setParameter(“posID”,data.getPositionID());
}
如果(选定的工作){
q、 setParameter(“workID”,data.getWorkplaceID());
}
员工=(列表)q.列表();
}捕获(例外e){
e、 printStackTrace();
}最后{
session.close();
}
返回员工;
}

所以帮助T.T

为什么在
WHERE
之后没有条件?如果不需要任何条件,为什么不将其删除where子句下的以下条件为空,但where子句仍然出现。这正是我想要做的(删除where子句),但我不知道如何。。。条款中涉及的条件中,您的代码不够。。更新您的问题,并显示形成查询的代码,而不仅仅是最终结果。如果条件不存在,您应该删除
where
,或者至少放置
where 1
,条件为“和[CONDITION]”。可能您发布了SQL输出,但我们需要的是HQL语句的代码,请更新您的问题
                if(checkAllNotEmpty(data)) {
                    query = query.concat("WHERE ");

                    if(data.getEmployeeID() != null && !data.getEmployeeID().equals("")) {  
                        criteria.add(CRITERIA_EMPLOYEEID2);
                        System.out.println("Employee IDs");
                        input_empID = true;
                    } 

                    if(data.getEmployeeName()!= null && !data.getEmployeeName().equals("")){ 
                        criteria.add(nameCriteriaHelper(data.getEmployeeName()));
                        System.out.println("Employee Name AKOOO");
                        input_empName = true;
                    }

                    if(data.getDepartmentID()!=0) {
                        criteria.add(CRITERIA_DEPARTMENT);
                        System.out.println("Dept ID ");
                        selected_dept = true;
                    }
                    if(data.getPositionID()!=0) {
                        criteria.add(CRITERIA_POSITION);
                        System.out.println("POS ID ");
                        selected_pos = true;
                    }
                    if(data.getWorkplaceID()!=0) {
                        criteria.add(CRITERIA_WORKPLACE);
                        selected_work = true;
                    }

                    query = query.concat(String.join(" OR ", criteria));
                }
                query = query.concat(" ORDER BY emp.joinDate DESC");
                System.out.println("QUERY: " + query);
                Query q = session.createQuery(query);
                if(input_empID) {
                    q.setParameter("id", "%" + data.getEmployeeID() + "%");
                }
                if(input_empName) {
                    if(searchbyOne)
                        q.setParameter("inputName", "%" + data.getEmployeeName() + "%");
                    if(searchbyFandL)
                        q.setParameter("firstLastName", "%" +firstLastName+ "%");
                    if(searchbyCompName)
                        q.setParameter("completeName", "%" +completeName+ "%");
                }

                if(selected_dept) {
                    q.setParameter("deptID", data.getDepartmentID());
                }
                if(selected_pos) {
                    q.setParameter("posID", data.getPositionID());
                }
                if(selected_work) {
                    q.setParameter("workID", data.getWorkplaceID());
                }
                employees = (List<Object>) q.list();
    }catch(Exception e){
        e.printStackTrace();
    }finally{
        session.close();
    }

    return employees;
}