gpt4 book ai didi

java - Hibernate 查询语法异常 : org. hibernate.hql.ast.QuerySyntaxException: unexpected token

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:03:05 26 4
gpt4 key购买 nike

我有一个查询,我要连接两个表 ROuteMaster 和 RouteHalts。当我执行内部连接时,我得到了

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 中为 RouteMaster 设置了多对一映射,我在 RouteHalts 中为 RouteMaster 定义了 getter 和 setter 方法

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

还是报同样的错。请有人指导我。

映射文件

<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)类 RouteMaster 扩展 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)类 RouteHalts 扩展 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;
}

最佳答案

您不应在 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<RouteMaster>代替 List<Object[]> .

关于java - Hibernate 查询语法异常 : org. hibernate.hql.ast.QuerySyntaxException: unexpected token,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12003430/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com