2012-08-17 8 views
6

私は2つのテーブルROuteMasterとRouteHaltsを結合しているクエリを持っています。私は実行すると、内側 は私がサイトを通じて検索し、類似した質問と、それに対する応答を見つけ Hibernateクエリ構文例外: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] 

を取得しています参加します。私はルートマスターのためのRouteHaltsにおける多対1のマッピングを持っている

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" /> 

でルートマスターのためのgetterメソッドとsetterメソッドを定義したが、まだ同じエラーを取得していた言及します。いくつかの人が私を導くことができます。

マッピングファイル

<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 = -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; 
} 
を拡張永続{

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を拡張

答えて

8

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 

またはあなたが書き込みのためシータのスタイルを使用することができます参加:

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.createQuery(queryText); 

session.createSQLQuery(queryText); 

を使うべきところで、中には、エンティティ全体ではなく、区切られたフィールド(列)を取得するために優れている、あなたの場合であってもよいですか?このためには使用することができます。

select rm from ... 

をこれはList<Object[]>List<RouteMaster> instedを返します。

+0

最初の例で示したように書いていますが、同じエラーが発生しています。これは検索条件の条件の1つであるため、SQLに変更することはできません。私はこれを変更する場合、私はすべてのものに再加工する必要があります。 –

+0

同じエラーが発生してもよろしいですか? – dimas

+0

はい、org.hibernate.hql.ast.QuerySyntaxException:予期しないトークン:1行目、176列目のON [SELECT rm.id、rm.routeCode、rm.startPlaceId、rm.endPlaceId、rm.active、rm.linkedRoute FROM com .oprs.pojo.routes.RouteMaster rm INNER JOIN rm.routeHalts AS rh ON rm.id = rh.routeId WHERE rh.placeId =:PlaceId ORDER BY rm。id ASC] –

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で使用されている内部結合を教えていただけますか?あなたのhibernate xmlファイルによれば、私はRouteMasterに多くのRouteHaltsがあると仮定します。 –

+0

はい、あなたは正しいです、私はRouteHaltsで多対1のマッピングを持っています。 getterメソッドとsetterメソッドでRouteHaltをRouteMaster pojoで定義する必要がありますか?それは愚かな質問かもしれませんが、私は休止状態に新しいですか? –

関連する問題