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
Hibernate 不相交实体的查询规范_Hibernate_Jpa_Spring Data Jpa_Spring Data - Fatal编程技术网

Hibernate 不相交实体的查询规范

Hibernate 不相交实体的查询规范,hibernate,jpa,spring-data-jpa,spring-data,Hibernate,Jpa,Spring Data Jpa,Spring Data,我不熟悉Spring数据。我知道我可以使用JPA规范(其中T是我的实体)动态地构建where谓词lambda样式,JHipster有许多工具可以基于用户输入动态构建where谓词。我已经成功地将这些谓词集成到简单的根实体查询中(从[RootEntity]项中选择[something]) 现在我的问题是,我的查询必须跨越联接中的无关实体,因此必须跨越筛选器 如上所述,某些实体没有映射关系,并且必须没有映射关系 查询映射到DTO 查询必须是可分页的 有些过滤器是由代码固定和注入的 用户将为所有三个

我不熟悉Spring数据。我知道我可以使用JPA
规范
(其中T是我的实体)动态地构建where谓词lambda样式,JHipster有许多工具可以基于用户输入动态构建where谓词。我已经成功地将这些谓词集成到简单的根实体查询中(
从[RootEntity]项中选择[something]

现在我的问题是,我的查询必须跨越联接中的无关实体,因此必须跨越筛选器

  • 如上所述,某些实体没有映射关系,并且必须没有映射关系
  • 查询映射到DTO
  • 查询必须是可分页的
  • 有些过滤器是由代码固定和注入的
  • 用户将为所有三个实体的大多数属性提供过滤器输入
  • 目前我还不清楚这个问题
HQL查询的结构如下

select A.field as field, ... B.field as field, ... C.field as field
from FirstEntity A left outer join
     SecondEntity B on (A.something = B.something) left outer join
     ThirdEntity C on (C.something = ?.something)
where ????
我还没有尝试过任何东西,主要是因为签名的选择会影响其他一切

我一直在设计这个方法

我想问,当查询跨越不相关的实体时,如何正确使用
规范。

我不知道Spring数据是否接受这样的内容

@Query("[my hql text as above, with aliases]")
Page<DTO> doTheQuery(Specification<FirstEntity> firstFilter, Specification<SecondEntity> secondFilter, Specification<ThirdEntity> thirdFilter, Pageable pageable);
@Query(“[my hql text如上,带别名]”)
查询页面(规格第一过滤器、规格第二过滤器、规格第三过滤器、可分页);
在上面的示例中,有三种不同的过滤器

@Query(“[my hql text如上,带别名]”)
PageDotheQuery(规格单过滤器,可分页);

在本例中,调用代码应该正确地使用来指示Hibernate谓词应用于不同的根实体(我已经使用别名A、B、C的实体).

在这种情况下,您可以使用
标准Api
,或者使用
规范获取实体
,然后按代码创建
DTO
s有一张问题通知单,它标记为
未解决
@Query("[my hql text as above, with aliases]")
Page<DTO> doTheQuery(Specification<?> singleFilter, Pageable pageable);