Hibernate查询语法异常:org.hibernate.hql.ast.QuerySyntaxException:意外令牌 [英] Hibernate Query Syntax exception : org.hibernate.hql.ast.QuerySyntaxException: unexpected token

查看:527
本文介绍了Hibernate查询语法异常:org.hibernate.hql.ast.QuerySyntaxException:意外令牌的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个查询,我正在加入两个表ROuteMaster和RouteHalts。
当我执行内部连接时,我得到

  org.hibernate.hql.ast.QuerySyntaxException:意外标记:on在第1行附近,

第169列[SELECT rm.id,rm.routeCode,rm.startPlaceId,rm.endPlaceId,
rm.active,rm.linkedRoute FROM com.oprs.pojo。 routes.RouteMaster rm INNER JOIN
RouteHalts rh on rm.id = rh.routeId WHERE rh.placeId =:PlaceId
ORDER BY rm.id ASC]

我通过网站进行了搜索,发现了类似的问题和响应。引用的问题是:

  Hibernate:org.hibernate.hql.ast.QuerySyntaxException:意外的令牌

我在RouteHalt中为RouteMaster进行了多对一映射,我已经在RouteHalts中为RouteMaster定义了getter和setter方法

 <多对一名称=RouteMasterclass =com.oprs.pojo.routes.RouteMaster
fetch = join
foreign-key =idcolumn =ROUTE_IDinsert =false
update =falselazy =false/>

但仍然出现相同的错误。

映射文件

 < / p> hibernate-mapping package =com.oprs.pojo.routes> 
<! - RouteMaster表的Hibernate映射 - >
< class name =RouteMastertable =OPRS_ROUTE_MASTER>
< id name =idcolumn =ROUTE_IDtype =java.lang.Long>
< generator class =assigned/>
< / id>
< property name =startPlaceIdcolumn =START_PLACE_ID/>
< property name =endPlaceIdcolumn =END_PLACE_ID/>
< property name =routeCodecolumn =ROUTE_CODE/>
< property name =routeNamecolumn =ROUTE_NAME/>
< property name =activecolumn =IS_ACTIVE/>
< property name =linkedRoutecolumn =LINKED_ROUTE/>
< property name =returnRouteIdcolumn =RET_ROUTE_ID/>
<! - 审计员信息 - >
< component name =auditorclass =com.oprs.pojo.base.Auditor>
< property name =createdBycolumn =CREATED_BY/>
< property name =createdDatecolumn =CREATED_DATE/>
< property name =modifiedBycolumn =MODIFIED_BY/>
< property name =modifiedDatecolumn =MODIFIED_DATE/>
< / component>
foreign-key =routeIdcolumn =ROUTE_ID insert =false
update =falselazy =false/>
< / class>

<! - RouteHalts表的Hibernate映射 - >
< class name =RouteHaltstable =OPRS_ROUTE_HALTS>
< id name =idcolumn =HALTS_IDtype =java.lang.Long>
< generator class =assigned/>
< / id>
< property name =routeIdcolumn =ROUTE_ID/>
< property name =placeIdcolumn =PLACE_ID/>
< property name =seqNocolumn =SEQ_NO/>
< property name =distanceKMcolumn =DISTANCE_KM/>
< property name =bordercolumn =IS_BORDER/>
< property name =tollscolumn =NO_OF_TOLLS/>
<! - 审计员信息 - >
< component name =auditorclass =com.oprs.pojo.base.Auditor>
< property name =createdBycolumn =CREATED_BY/>
< property name =createdDatecolumn =CREATED_DATE/>
< property name =modifiedBycolumn =MODIFIED_BY/>
< property name =modifiedDatecolumn =MODIFIED_DATE/>
< / component>
< / class>


Route Master的POJO

公共类RouteMaster extends Persistent {b / b>

  private static final long serialVersionUID = -5710336066048392949L; 

private long startPlaceId;
private long endPlaceId;
private long returnRouteId;
private String startPlaceCode;
private String endPlaceCode;
private String startPlaceName;
private String endPlaceName;
private String routeCode;
private String routeName;
private String active;
私人审计师审计师;
private boolean revervseRoute;
private String linkedRoute = AppConstants.N;
私人地图< Double,RouteHalts> haltsMap;
私人RouteHalts routeHalts;


public RouteHalts getRouteHalts(){
return routeHalts;
}

public void setRouteHalts(RouteHalts routeHalts){
this.routeHalts = routeHalts;
}

public Long getStartPlaceId(){
return startPlaceId;
}

public void setStartPlaceId(Long startPlaceId){
this.startPlaceId = startPlaceId;
}

public Long getEndPlaceId(){
return endPlaceId;
}

public void setEndPlaceId(Long endPlaceId){
this.endPlaceId = endPlaceId;
}

public String getStartPlaceCode(){
return startPlaceCode;
}

public void setStartPlaceCode(String startPlaceCode){
this.startPlaceCode = startPlaceCode;
}

public String getEndPlaceCode(){
return endPlaceCode;
}

public void setEndPlaceCode(String endPlaceCode){
this.endPlaceCode = endPlaceCode;
}

public Long getReturnRouteId(){
return returnRouteId;
}

public void setReturnRouteId(Long returnRouteId){
this.returnRouteId = returnRouteId;
}

public String getRouteCode(){
return routeCode;
}

public void setRouteCode(String routeCode){
this.routeCode = routeCode;
}

public Auditor getAuditor(){
return auditor;
}

public void setAuditor(审计员审计员){
this.auditor = auditor;
}

public String getStartPlaceName(){
return startPlaceName;
}

public void setStartPlaceName(String startPlaceName){
this.startPlaceName = startPlaceName;
}

public String getEndPlaceName(){
return endPlaceName;
}

public void setEndPlaceName(String endPlaceName){
this.endPlaceName = endPlaceName;
}

public String getActive(){
return active;
}

public void setActive(String active){
this.active = active;
}

public Map< Double,RouteHalts> getHaltsMap(){
return haltsMap;

$ b $ public void setHaltsMap(Map< Double,RouteHalts> haltsMap){
this.haltsMap = haltsMap;
}

public boolean isRevervseRoute(){
return revervseRoute;
}

public void setRevervseRoute(boolean revervseRoute){
this.revervseRoute = revervseRoute;
}

public String getLinkedRoute(){
return linkedRoute;
}

public void setLinkedRoute(String linkedRoute){
this.linkedRoute = linkedRoute;
}

public String getRouteName(){
return routeName;
}

public void setRouteName(String routeName){
this.routeName = routeName;
}

}

 RouteHalts的POJO 

public class RouteHalts extends Persistent {

  private static final long serialVersionUID = -1491637903595290895L; 
private long placeId;
private long routeId;
private String placeCode;
private Double seqNo;
私人双倍距离KM;
私有布尔边框;
私人审计师审计师;

私人字符串placeName;
private String stateCode;
private String stopType;
private String departureTime;
私人整数通行费;
private String platformNo;
private long stopTypeId;
private Integer linkSequenceNo;
private String actualTime;
private int arrivalDay;

public String getStateCode(){
return stateCode;
}

public void setStateCode(String stateCode){
this.stateCode = stateCode;
}

public Long getRouteId(){
return routeId;
}

public void setRouteId(Long routeId){
this.routeId = routeId;
}

public Long getPlaceId(){
return placeId;
}

public void setPlaceId(Long placeId){
this.placeId = placeId;
}

public String getPlaceCode(){
return placeCode;
}

public void setPlaceCode(String placeCode){
this.placeCode = placeCode;
}

public double getDistanceKM(){
return distanceKM;
}

public void setDistanceKM(Double distanceKM){
this.distanceKM = distanceKM;
}

public boolean isBorder(){
return border;
}

public void setBorder(boolean border){
this.border = border;
}

public Auditor getAuditor(){
return auditor;
}

public void setAuditor(审计员审计员){
this.auditor = auditor;
}

public String getPlaceName(){
return placeName;
}

public void setPlaceName(String placeName){
this.placeName = placeName;
}

public Double getSeqNo(){
return seqNo;
}

public void setSeqNo(Double seqNo){
this.seqNo = seqNo;
}

public String getStopType(){
return stopType;
}

public void setStopType(String stopType){
this.stopType = stopType;
}

public String getDepartureTime(){
return departureTime;
}

public void setDepartureTime(String departureTime){
this.departureTime = departureTime;
}

public Integer getTolls(){
return toll;
}

public void setTolls(Integer toll){
this.tolls = tolls;
}

public String getPlatformNo(){
return platformNo;
}

public void setPlatformNo(String platformNo){
this.platformNo = platformNo;
}

public Long getStopTypeId(){
return stopTypeId;
}

public void setStopTypeId(Long stopTypeId){
this.stopTypeId = stopTypeId;
}

public Integer getLinkSequenceNo(){
return linkSequenceNo;
}

public void setLinkSequenceNo(Integer linkSequenceNo){
this.linkSequenceNo = linkSequenceNo;
}

public int getArrivalDay(){
return arrivalDay;
}

public void setArrivalDay(int arrivalDay){
this.arrivalDay = arrivalDay;
}

public String getActualTime(){
return actualTime;
}

public void setActualTime(String actualTime){
this.actualTime = actualTime;
}

}

解决方案

您不应该在HQL中使用显式的JOIN ON。您可以在HQL中使用隐式连接:

  SELECT rm.id,rm.routeCode,rm.startPlaceId,rm.endPlaceId, rm.active,rm.linkedRoute 
FROM com.abhibus.oprs.pojo.routes.RouteMaster rm
INNER JOIN rm.routeHalts rh WHERE rh.placeId =:PlaceId ORDER BY rm.id ASC

或者您可以使用Theta风格写入连接:

  SELECT rm.id,rm.routeCode,rm.startPlaceId,rm.endPlaceId,rm.active,rm.linkedRoute 
FROM com.abhibus.oprs.pojo.routes.RouteMaster rm,RouteHalts rh
WHERE rm.id = rh.routeId AND rh.placeId =:PlaceId ORDER BY rm.id ASC

您也可以将您的查询作为原生SQL查询执行,而不是HQL查询。为此,您应该使用

  session.createSQLQuery(queryText); 

而不是

  session.createQuery(QUERYTEXT); 

顺便说一下,在您的情况下可能最好取整个实体,而不是分隔字段(列)?为此,您可以使用:

  select rm from ... 

这将返回 List< Object []>的 List< RouteMaster> ; 。


I have a query where i am joining two tables ROuteMaster and RouteHalts. When i perform inner join i am getting

org.hibernate.hql.ast.QuerySyntaxException: unexpected token: on near line 1, 

column 169 [SELECT  rm.id , rm.routeCode , rm.startPlaceId , rm.endPlaceId , 
rm.active, rm.linkedRoute FROM com.oprs.pojo.routes.RouteMaster rm  INNER JOIN 
RouteHalts rh  on rm.id = rh.routeId  WHERE  rh.placeId = :PlaceId  
ORDER BY  rm.id  ASC]

I searched through the site and found similar question and the response for it. the question referred was

Hibernate: org.hibernate.hql.ast.QuerySyntaxException: unexpected token

I have many-to-one mapping in RouteHalts for RouteMaster, I have defined getter and setter methods for RouteMaster in RouteHalts

<many-to-one name="RouteMaster" class="com.oprs.pojo.routes.RouteMaster" 
                    fetch="join"
            foreign-key="id" column="ROUTE_ID" insert="false"
            update="false" lazy="false" />

but still getting the same error. Can please some one guide me.

Mapping files

<hibernate-mapping package="com.oprs.pojo.routes">
    <!-- Hibernate mapping for RouteMaster table -->
    <class name="RouteMaster" table="OPRS_ROUTE_MASTER">
        <id name="id" column="ROUTE_ID" type="java.lang.Long">
            <generator class="assigned" />
        </id>
        <property name="startPlaceId" column="START_PLACE_ID"/>
        <property name="endPlaceId" column="END_PLACE_ID"/>
        <property name="routeCode" column="ROUTE_CODE"/>
        <property name="routeName" column="ROUTE_NAME"/>
        <property name="active" column="IS_ACTIVE"/>
        <property name="linkedRoute" column="LINKED_ROUTE"/>
        <property name="returnRouteId" column="RET_ROUTE_ID"/>
        <!-- Auditor Information -->
        <component name="auditor" class="com.oprs.pojo.base.Auditor">
            <property name="createdBy" column="CREATED_BY" />
            <property name="createdDate" column="CREATED_DATE" />
            <property name="modifiedBy" column="MODIFIED_BY" />
            <property name="modifiedDate" column="MODIFIED_DATE" />
        </component>
        <many-to-one  name="RouteHalts" class="com.oprs.pojo.routes.RouteHalts" fetch="join"
            foreign-key="routeId" column="ROUTE_ID" insert="false"
            update="false" lazy="false" />
    </class>

    <!-- Hibernate mapping for RouteHalts table -->
    <class name="RouteHalts" table="OPRS_ROUTE_HALTS">
        <id name="id" column="HALTS_ID" type="java.lang.Long">
            <generator class="assigned" />
        </id>
        <property name="routeId" column="ROUTE_ID"/>
        <property name="placeId" column="PLACE_ID"/>
        <property name="seqNo" column="SEQ_NO"/>
        <property name="distanceKM" column="DISTANCE_KM"/>
        <property name="border" column="IS_BORDER"/>
        <property name="tolls" column="NO_OF_TOLLS"/>       
        <!-- Auditor Information -->
        <component name="auditor" class="com.oprs.pojo.base.Auditor">
            <property name="createdBy" column="CREATED_BY" />
            <property name="createdDate" column="CREATED_DATE" />
            <property name="modifiedBy" column="MODIFIED_BY" />
            <property name="modifiedDate" column="MODIFIED_DATE" />
        </component>
    </class>


POJO of Route Master

public class RouteMaster extends Persistent {

private static final long serialVersionUID = -5710336066048392949L;

private Long startPlaceId;
private Long endPlaceId;
private Long returnRouteId;
private String startPlaceCode;
private String endPlaceCode;
private String startPlaceName;
private String endPlaceName;
private String routeCode;
private String routeName;
private String active;
private Auditor auditor;
private boolean revervseRoute;
private String linkedRoute = AppConstants.N;
private Map<Double, RouteHalts> haltsMap;
private RouteHalts routeHalts;


public RouteHalts getRouteHalts() {
    return routeHalts;
}

public void setRouteHalts(RouteHalts routeHalts) {
    this.routeHalts = routeHalts;
}

public Long getStartPlaceId() {
    return startPlaceId;
}

public void setStartPlaceId(Long startPlaceId) {
    this.startPlaceId = startPlaceId;
}

public Long getEndPlaceId() {
    return endPlaceId;
}

public void setEndPlaceId(Long endPlaceId) {
    this.endPlaceId = endPlaceId;
}

public String getStartPlaceCode() {
return startPlaceCode;
}

public void setStartPlaceCode(String startPlaceCode) {
this.startPlaceCode = startPlaceCode;
}

public String getEndPlaceCode() {
return endPlaceCode;
}

public void setEndPlaceCode(String endPlaceCode) {
this.endPlaceCode = endPlaceCode;
}

public Long getReturnRouteId() {
    return returnRouteId;
}

public void setReturnRouteId(Long returnRouteId) {
    this.returnRouteId = returnRouteId;
}

public String getRouteCode() {
return routeCode;
}

public void setRouteCode(String routeCode) {
this.routeCode = routeCode;
}

public Auditor getAuditor() {
return auditor;
}

public void setAuditor(Auditor auditor) {
this.auditor = auditor;
}

public String getStartPlaceName() {
    return startPlaceName;
}

public void setStartPlaceName(String startPlaceName) {
    this.startPlaceName = startPlaceName;
}

public String getEndPlaceName() {
    return endPlaceName;
}

public void setEndPlaceName(String endPlaceName) {
    this.endPlaceName = endPlaceName;
}

public String getActive() {
    return active;
}

public void setActive(String active) {
    this.active = active;
}

public Map<Double, RouteHalts> getHaltsMap() {
    return haltsMap;
}

public void setHaltsMap(Map<Double, RouteHalts> haltsMap) {
    this.haltsMap = haltsMap;
}

public boolean isRevervseRoute() {
    return revervseRoute;
}

public void setRevervseRoute(boolean revervseRoute) {
    this.revervseRoute = revervseRoute;
}

public String getLinkedRoute() {
    return linkedRoute;
}

public void setLinkedRoute(String linkedRoute) {
    this.linkedRoute = linkedRoute;
}

public String getRouteName() {
    return routeName;
}

public void setRouteName(String routeName) {
    this.routeName = routeName;
}

}

POJO of RouteHalts

public class RouteHalts extends Persistent {

private static final long serialVersionUID = -1491637903595290895L;
private Long placeId;
private Long routeId;
private String placeCode;
private Double seqNo;
private Double distanceKM;
private boolean border;
private Auditor auditor;

private String placeName;
private String stateCode;
private String stopType;
private String departureTime;
private Integer tolls;
private String platformNo;
private Long stopTypeId;
private Integer linkSequenceNo;
private String actualTime;
private int arrivalDay;

public String getStateCode() {
    return stateCode;
}

public void setStateCode(String stateCode) {
    this.stateCode = stateCode;
}

public Long getRouteId() {
    return routeId;
}

public void setRouteId(Long routeId) {
    this.routeId = routeId;
}

public Long getPlaceId() {
    return placeId;
}

public void setPlaceId(Long placeId) {
    this.placeId = placeId;
}

public String getPlaceCode() {
return placeCode;
}

public void setPlaceCode(String placeCode) {
this.placeCode = placeCode;
}

public Double getDistanceKM() {
return distanceKM;
}

public void setDistanceKM(Double distanceKM) {
this.distanceKM = distanceKM;
}

public boolean isBorder() {
    return border;
}

public void setBorder(boolean border) {
    this.border = border;
}

public Auditor getAuditor() {
return auditor;
}

public void setAuditor(Auditor auditor) {
this.auditor = auditor;
}

public String getPlaceName() {
    return placeName;
}

public void setPlaceName(String placeName) {
    this.placeName = placeName;
}

public Double getSeqNo() {
    return seqNo;
}

public void setSeqNo(Double seqNo) {
    this.seqNo = seqNo;
}

public String getStopType() {
    return stopType;
}

public void setStopType(String stopType) {
    this.stopType = stopType;
}

public String getDepartureTime() {
    return departureTime;
}

public void setDepartureTime(String departureTime) {
    this.departureTime = departureTime;
}

public Integer getTolls() {
    return tolls;
}

public void setTolls(Integer tolls) {
    this.tolls = tolls;
}

public String getPlatformNo() {
    return platformNo;
}

public void setPlatformNo(String platformNo) {
    this.platformNo = platformNo;
}

public Long getStopTypeId() {
    return stopTypeId;
}

public void setStopTypeId(Long stopTypeId) {
    this.stopTypeId = stopTypeId;
}

public Integer getLinkSequenceNo() {
    return linkSequenceNo;
}

public void setLinkSequenceNo(Integer linkSequenceNo) {
    this.linkSequenceNo = linkSequenceNo;
}

public int getArrivalDay() {
    return arrivalDay;
}

public void setArrivalDay(int arrivalDay) {
    this.arrivalDay = arrivalDay;
}

public String getActualTime() {
    return actualTime;
}

public void setActualTime(String actualTime) {
    this.actualTime = actualTime;
}

}

解决方案

You should not use explicit "JOIN ON" in HQL. Instead you can use implicit joining in HQL:

SELECT  rm.id , rm.routeCode , rm.startPlaceId , rm.endPlaceId , rm.active , rm.linkedRoute 
FROM com.abhibus.oprs.pojo.routes.RouteMaster rm  
INNER JOIN rm.routeHalts rh WHERE  rh.placeId = :PlaceId  ORDER BY  rm.id  ASC

or you can use Theta style for writing join:

SELECT  rm.id , rm.routeCode , rm.startPlaceId , rm.endPlaceId , rm.active , rm.linkedRoute 
FROM com.abhibus.oprs.pojo.routes.RouteMaster rm, RouteHalts rh
WHERE rm.id = rh.routeId AND rh.placeId = :PlaceId  ORDER BY  rm.id  ASC

Also you can execute your query as native SQL query, not HQL query. For this you should use

session.createSQLQuery(queryText);

instead of

session.createQuery(queryText);

And by the way, may be in your case in is better to fetch whole entity, not separated fields (columns)? For this you can use:

select rm from ...

This will return the List<RouteMaster> insted of List<Object[]>.

这篇关于Hibernate查询语法异常:org.hibernate.hql.ast.QuerySyntaxException:意外令牌的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆