Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate期待“全部”,找到“(”-这是什么意思?_Java_Hibernate_Join_Hql_Fetch - Fatal编程技术网

Java Hibernate期待“全部”,找到“(”-这是什么意思?

Java Hibernate期待“全部”,找到“(”-这是什么意思?,java,hibernate,join,hql,fetch,Java,Hibernate,Join,Hql,Fetch,我收到此错误,但找不到任何引用: org.hibernate.hql.internal.ast.QuerySyntaxException: expecting "all", found '(' near line 1, column 221 [select new EffectivePermissions(r.id, r.name, r.defaultValue, rc.value AS companyValue, ru.value AS userValue) from permissi

我收到此错误,但找不到任何引用:

    org.hibernate.hql.internal.ast.QuerySyntaxException: expecting "all", found '(' near line 1, column 221 [select new EffectivePermissions(r.id, r.name, r.defaultValue, rc.value AS companyValue, ru.value AS userValue) from permissionsPackage.Entity.Permissions r left join permissionsPackage.Entity.CompanyPermissions rc fetch (r.id=rc.permissionId AND rc.companyId=2313 ) left join permissionsPackage.Entity.UserPermissions ru fetch (r.id=ru.permissionId AND ru.userId=1)]
 at org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:54)
 at org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:47)
 at org.hibernate.hql.internal.ast.ErrorCounter.throwQueryException(ErrorCounter.java:79)
下面是我正在使用的查询

  this.hql = "select new EffectivePermissions(r.id, r.name, r.defaultValue, rc.value AS companyValue, ru.value AS userValue) "
            + "from "
            + Permissions.class.getName()
            + " r "
            + "left join "
            + CompanyPermissions.class.getName()
            + " rc "
            + "fetch (r.id=rc.permissionId AND rc.companyId="
            + user.getCompany().getId()
            + " ) "
            + "left join "
            + UserPermissions.class.getName()
            + " ru "
            + "fetch (r.id=ru.permissionId AND ru.userId="
            + user.getId()
            + ")";

    Query query = sessionFactory.getCurrentSession().createQuery(hql);

    permissions = query.list();

我有一个名为EffectivePermission的类,其属性在构造函数中,我想基于它获取一个列表。

来自Hibernate参考章节:

fetch联接允许使用单个select初始化值的关联或集合及其父对象…有关更多信息,请参阅第19.1节“获取策略”

您还将看到,它必须在joinkeyword之后使用,如from e1 left join fetch e2。它也可以在from entity fetch all properties中使用。这就是Hibernate需要all关键字的原因

关于您的特定查询,据我所知,使用HQL您无法指定联接条件。Hibernate将使用映射中配置的条件自动执行联接。这就是为什么需要映射关系才能使用HQL联接的原因

最重要的是,请记住HQL中的联接是完全不同的。您不会联接两个实体,而是使用一个集合值属性关联来联接一个实体。请注意,您可以始终执行类似笛卡尔的联接。请注意,注意性能,并始终查看生成的查询和执行计划

作为旁注,由于潜在的注入漏洞,将参数值直接附加到查询中可能被认为是不好的做法。您应该改用命名参数