2012-08-17 16 views
6

मेरे पास एक प्रश्न है जहां मैं दो टेबल ROuteMaster और रूटहेल्ट्स में शामिल हो रहा हूं। भीतरी जब मैं प्रदर्शन में शामिल होने मैंहाइबरनेट क्वेरी सिंटेक्स अपवाद: org.hibernate.hql.ast.QuerySyntaxException: अप्रत्याशित टोकन

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] 

हो रही है मैं इस साइट के माध्यम से खोज की है और इसी तरह के सवाल और इसके लिए प्रतिक्रिया नहीं मिली। सवाल में भेजा

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

था मैं 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" /> 

लेकिन अब भी वही त्रुटि प्राप्त करने में रूटमास्टर के लिए कई-से-एक रूटमास्टर के लिए RouteHalts में मानचित्रण, मैं परिभाषित किया है मनुष्य और सेटर तरीके की है। कृपया मुझे कोई गाइड कर सकते हैं।

मानचित्रण फ़ाइलों

<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 

सार्वजनिक वर्ग रूटमास्टर लगातार फैली {

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 

सार्वजनिक वर्ग RouteHalts फैली लगातार {

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; 
} 

}

उत्तर

8

आपको एचक्यूएल में स्पष्ट "जॉइन ऑन" का उपयोग नहीं करना चाहिए। इसके बजाय आप 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 

या आप लिखने के लिए थीटा शैली का उपयोग कर सकते में शामिल होने:

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<RouteMaster>List<Object[]> के insted वापस आ जाएगी।

+0

मैंने लिखा है जैसा आपने पहले उदाहरण में दिखाया है, लेकिन फिर भी वही त्रुटि मिल रही है। मैं इसे एसक्यूएल में नहीं बदल सकता क्योंकि यह खोज मानदंडों की शर्तों में से एक है। अगर मैं इसे बदलता हूं तो मुझे उन सभी पर फिर से काम करने की ज़रूरत है। –

+0

क्या आप वाकई एक ही त्रुटि प्राप्त करते हैं? – dimas

+0

हाँ, org.hibernate.hql.ast.QuerySyntaxException: अप्रत्याशित टोकन: निकट रेखा 1 पर, कॉलम 176 [SELECT rm.id, rm.routeCode, rm.startPlaceId, rm.endPlaceId, rm.active, rm.linkedRoute com से .oprs.pojo.routes.RouteMaster आरएम इनरर जॉइन rm.routeHalts के रूप में rm.id = rh.routeId पर rh.placeId =: आरएम द्वारा प्लेस आईडी ऑर्डर।आईडी एएससी] –

0

अपनी क्वेरी को यह पसंद करें;

SELECT rm.id , rm.routeCode , rm.startPlaceId , rm.endPlaceId , rm.active , rm.linkedRoute FROM RouteMaster rm INNER JOIN rm.routeHalts AS rh ON rm.id = rh.routeId WHERE rh.placeId = :PlaceId ORDER BY rm.id ASC 
+0

क्या आप कृपया उपर्युक्त क्वेरी में उपयोग किए गए इनर जॉइन को समझा सकते हैं, INNER JOIN rm.routeHalts AS rh –

+0

@ user1103504 आपकी हाइबरनेट xml फ़ाइल के अनुसार, मुझे लगता है कि रूटमेस्टर में कई रूटहेल्ट हैं। इसलिए यही कारण है कि मैंने यह प्रश्न लिखा था। –

+0

हाँ आप सही हैं, मेरे पास रूटहेल्ट्स में कई से एक मानचित्रण है। क्या मुझे गेटटर और सेटर विधियों के साथ अपने रूटमास्टर पॉजो में परिभाषित रूटहेल्ट्स की आवश्यकता है? हो सकता है कि यह एक मूर्ख सवाल है लेकिन मैं हाइबरनेट करने के लिए नया हूँ? –

संबंधित मुद्दे