Java QuerySyntaxException:应该是加入的路径!在HQL中查询无关表
我有这些POJO课程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
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>