Java 语法错误Hibernate-意外标记:ON

Java 语法错误Hibernate-意外标记:ON,java,mysql,hibernate,spring-mvc,Java,Mysql,Hibernate,Spring Mvc,我有三张桌子: 摄像头-[id、地址、城市、url、服务器名称,…] vlc-[id,摄像机id(等于摄像机中的id),服务器名称,端口,状态] 类别-[id,名称] Hear是我的MySQl语法,它给了我很好的结果: "SELECT vlc.camera_id, vlc.url, vlc.port," + " vlc.server_name, cameras.address, cameras.city, categories.name FROM vlc AS vlc" + " INNER

我有三张桌子: 摄像头-[id、地址、城市、url、服务器名称,…] vlc-[id,摄像机id(等于摄像机中的id),服务器名称,端口,状态] 类别-[id,名称]

Hear是我的MySQl语法,它给了我很好的结果:

"SELECT vlc.camera_id, vlc.url, vlc.port,"
 + " vlc.server_name, cameras.address, cameras.city, categories.name FROM vlc AS vlc" +
 " INNER JOIN cameras ON vlc.camera_id = cameras.id" +
 " INNER JOIN categories ON cameras.category_id = categories.id"
 + " WHERE vlc.status = 'active' AND ")
但在Hibernate中,我遇到了以下语法错误:

org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: ON near line 1, column 141 
有人能帮忙吗?我知道这可能是显而易见的,但我找不到解决办法

编辑: 我改为:

    @SuppressWarnings("unchecked")
public List<VLC> getVLCs() {
    return getCurrentSession().createSQLQuery("SELECT vlc.camera_id, vlc.url, vlc.port,"
                    + " vlc.server_name, cameras.address, cameras.city, categories.name FROM vlc AS vlc" +
                    " INNER JOIN cameras ON vlc.camera_id = cameras.id" +
                    " INNER JOIN categories ON cameras.category_id = categories.id"
                    + " WHERE vlc.status = 'active'").list();
}

我必须改变我的类中的某些内容,而不是使用
createSQLQuery
。 第二种是HQL(Hibernate查询语言)而不是SQL

UPD: 使用SQL hibernate无法将接收到的数据包装到对象。这就是为什么你必须使用

例如:

公共列表getVLCs(){
返回getCurrentSession().createQuery(“从Cat作为Cat内部连接获取Cat.mate左连接获取Cat.kittens”).list();
} 

如果Cat是映射到表的类

您将其更改为本机SQL,但您正在使用VLC和摄影机对象的属性进行投影,则需要将select限制为VLC对象,以便Hibernate知道如何将请求的属性列表映射到VLC对象,或者通过接收对象[]列表,然后自己选择每个值来显式地转换它们。

是否尝试使用本机查询或HQL?显示使用此查询的位置。请确保您使用的是
createSQLQuery
方法,而不是
createQuery
可能是HQL语句扫描您,请提供更多的代码来为您编写答案。它们之间的区别是什么??HQL-对于映射到表的对象,SQL用于表。
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to pl.humandevice.model.VLC
public List<VLC> getVLCs() {
    return getCurrentSession().createQuery("from Cat as cat inner join fetch cat.mate left join fetch cat.kittens").list();
}