Java QuerySyntaxException:应该是加入的路径!在HQL中查询无关表

Java QuerySyntaxException:应该是加入的路径!在HQL中查询无关表,java,hibernate,hql,Java,Hibernate,Hql,我有这些POJO课程 public class MapProxy implements Serializable { private Service service; private Application application; private Connector connector; //getter and setter } public class CategoryTranslator implements Serializable{ p

我有这些POJO课程

public class MapProxy implements Serializable {

    private Service service;
    private Application application;
    private Connector connector;

    //getter and setter
}

public class CategoryTranslator implements Serializable{

    private ArtCategory artCat;
    private ProviderCategory providerCat;
    private String provider;

    //gettere and setter
}
我在ArtCategory xml映射器中写入了一个查询,以获得来自serviceName和applicationName的ArtCategory结果

这里是问题

<query name="ArtCategory.getCategoryByServApp">
    SELECT DISTINCT cat_t.artCat
    FROM CategoryTranslator cat_t 
    INNER JOIN MapProxy mp WITH (cat_t.provider = mp.connector.provider.name)
    INNER JOIN mp.service ser WITH (ser.serviceName=:serviceName)
    INNER JOIN mp.application app WITH (app.applicationName=:applicationName)
</query>
[更新]

此查询运行良好:

SELECT DISTINCT cat_t.artCat
FROM CategoryTranslator cat_t 
WHERE cat_t.provider='test'
在另一个xml映射器(MaxProxy)中,我有一个查询,它也可以很好地工作

<query name="MapProxy.getProxy_service_app">
    SELECT mp
    FROM MapProxy mp
    INNER JOIN mp.service srv WITH (srv.serviceName=:serviceName) 
    INNER JOIN mp.application app WITH (app.applicationName=:applicationName)   
</query>

选择mp
从MapProxy mp
使用(srv.serviceName=:serviceName)内部连接mp.service srv
使用(app.applicationName=:applicationName)内部连接mp.application应用程序

为什么Hibernate不能映射mp应用程序?我错了什么?

我不确定,但在HQL中使用任意属性连接两个不相关的实体是不可能的。CategoryTranslator和MapProxy不相关,即它们之间没有引用。当然……这就是问题所在!这是正确的查询:
从CategoryTranslator cat中选择DISTINCT cat\u t.artCat,MapProxy mp,其中cat_t.provider=mp.connector.provider.name和mp.service.serviceName=:serviceName和mp.application.applicationName=:applicationName
现在您可能会更改为hibernate=>5.1,它能够支持问题中的场景。
<query name="MapProxy.getProxy_service_app">
    SELECT mp
    FROM MapProxy mp
    INNER JOIN mp.service srv WITH (srv.serviceName=:serviceName) 
    INNER JOIN mp.application app WITH (app.applicationName=:applicationName)   
</query>