使用Java在hibernate中出现意外的令牌错误

时间:2017-12-06 10:34:03

标签: java hibernate hql

我有Route Entity类,当我要在HQL查询中从该表中获取所有数据时,我只得到一个列的错误。

Route.class: -

@Entity
public class Route {

    @Id
    private long routeID;

    private String start;
    private String end;
    private String routeNo;
    private double startLat;
    private double startLon;
    private double endLat;
    private double endLon;
}

DataFetch.Class: -

public class DataFetch{

    public void FetchRoutes(){

        Query q = session.createQuery("select routeID,routeNo,start,end from Route ");
        List<Object[]> routes = (List<Object[]>) q.list();

        for (Object[] r : routes) {
            System.out.println("id: "+r[0]);
            System.out.println("No: "+r[1]);
            System.out.println("start: "+r[2]);
            System.out.println("end: "+r[3]);
        }
    }
}

在DataFetch.class中,如果我从查询q中删除“end”列,则没有错误。但如果我再次添加结束这个问题,它将给出一个错误。 下面我将我的错误显示为屏幕截图。

Click here to see my Error

有什么问题?

2 个答案:

答案 0 :(得分:2)

结束可能是一个保留字。

但是,为什么不只是使用Hibernate来获取它的价值,并跳过整个手动行映射的事情:

TypedQuery q = em.createQuery("select r from Route r", Route.class);
List<Route> routes = q.getResultList();

使用em和类型查询的示例,因为它提供了更漂亮的结果。会话和演员也可以这样做..

答案 1 :(得分:2)

End是保留关键字,因此您可以将其转义或使用select

中的表别名
"select r.routeID, r.routeNo, r.start, r.end from Route r"