2

このSQLクエリをHQLに変換する必要があります

select
        * 
    from
        ( select
            routemaste0_.ROUTE_ID as col_0_0_,
            routemaste0_.ROUTE_CODE as col_1_0_,
            routemaste0_.START_PLACE_ID as col_2_0_,
            routemaste0_.END_PLACE_ID as col_3_0_,
            routemaste0_.IS_ACTIVE as col_4_0_,
            routemaste0_.LINKED_ROUTE as col_5_0_
        from
            OPRS_ROUTE_MASTER routemaste0_
            inner join OPRS_ROUTE_HALTS routehalts0_
                 on routemaste0_.route_id = routehalts0_.route_id
        where routehalts0_.PLACE_ID = '51'
        order by
            routemaste0_.ROUTE_ID ASC  )

私はこのように試しました

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

しかし、期待した結果が得られません。私の懸念はinner join on、実行する条件が必要なことです。

誰かが私を助けることができますか

4

1 に答える 1

0

問題の理由は、route_idがどのテーブルの主キーでもないことが原因である可能性があると思います。そのため、この場合はシータスタイルの参加を試すことをお勧めします。

SELECT  rm.id , rm.routeCode , rm.startPlaceId , rm.endPlaceId , rm.active, rm.linkedRoute 
FROM RouteMaster rm, RouteHalts rh
WHERE rm.routeId = rh.routeId AND rh.placeId = :PlaceId  
ORDER BY  rm.id  A

また、HQLクエリのバリアントでは、where条件にrm.id=rh.routeId部分は必要ありません。

于 2012-08-17T13:31:26.917 に答える