关于Spring Data JPA 分页多表查询

Ksevenliu 2015-03-17 05:35:16
现在需要用到JPA的方法findAll(spec, pageRequest);来查询数据,但我需要在里面添加一个条件查询两个表
A表和B表和C表
A中有B的ID和C的ID
在A中1个CID对应一个或多个BID
现在我要查询B表,给一个参数C的ID
利用上面的findAll的分页方法查询出来,该怎么搞?

...全文
5705 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
whos2002110 2015-03-20
  • 打赏
  • 举报
回复
引用 3 楼 Ksevenliu 的回复:
[quote=引用 2 楼 whos2002110 的回复:] [quote=引用 1 楼 whos2002110 的回复:]

@Query("select a.b from A a where a.c.id = ?1")
?1 占位符对应findAll方法的第一个入参。 我也没怎么用过spring data jpa 你理解一下,试试行不行。
这个第一个入参要传入CID,不知道你的spec是什么东西[/quote]
public Page<Article> getArticles(Map<String, Object> searchParams, int pageNumber, int pageSize,
			String sortType) {
		PageRequest pageRequest = buildPageRequest(pageNumber, pageSize, sortType);
//		Specification<Article> spec = buildSpecification(null, searchParams);
		Map<String, SearchFilter> filters = SearchFilter.parse(searchParams);
//		filters.put("user.id", new SearchFilter("user.id", Operator.EQ, userId));
		Specification<Article> spec = DynamicSpecifications.bySearchFilter(filters.values(), Article.class);

		return articleDao.findAll(spec, pageRequest);
	}

	/**
	 * 创建分页请求.
	 */
	private PageRequest buildPageRequest(int pageNumber, int pagzSize, String sortType) {
		Sort sort = null;
		if ("auto".equals(sortType)) {
			sort = new Sort(Direction.ASC, "title");
		} else if ("title".equals(sortType)) {
			sort = new Sort(Direction.ASC, "title");
		}

		return new PageRequest(pageNumber - 1, pagzSize, sort);
	}
A中关联Bid和Cid Cid对应多个Bid 现在又参数Cid 需要查询对应的Bid 也就是多表查询,但是还需要分页功能 也就是说参数可能会有个page。[/quote] 我没用过Specification作为查询条件什么的, 都以前用过都是通过 @Query 指定查询的jpql。 像这样:

@Query("select a.b from A a where a.c.id = ?1")
Page<B> findAll(Long cid, Pageable pageRequest);
可能不试用你这种情况! 不过你可以尝试按我的方式修改试试
Ksevenliu 2015-03-19
  • 打赏
  • 举报
回复
引用 2 楼 whos2002110 的回复:
[quote=引用 1 楼 whos2002110 的回复:]

@Query("select a.b from A a where a.c.id = ?1")
?1 占位符对应findAll方法的第一个入参。 我也没怎么用过spring data jpa 你理解一下,试试行不行。
这个第一个入参要传入CID,不知道你的spec是什么东西[/quote]
public Page<Article> getArticles(Map<String, Object> searchParams, int pageNumber, int pageSize,
			String sortType) {
		PageRequest pageRequest = buildPageRequest(pageNumber, pageSize, sortType);
//		Specification<Article> spec = buildSpecification(null, searchParams);
		Map<String, SearchFilter> filters = SearchFilter.parse(searchParams);
//		filters.put("user.id", new SearchFilter("user.id", Operator.EQ, userId));
		Specification<Article> spec = DynamicSpecifications.bySearchFilter(filters.values(), Article.class);

		return articleDao.findAll(spec, pageRequest);
	}

	/**
	 * 创建分页请求.
	 */
	private PageRequest buildPageRequest(int pageNumber, int pagzSize, String sortType) {
		Sort sort = null;
		if ("auto".equals(sortType)) {
			sort = new Sort(Direction.ASC, "title");
		} else if ("title".equals(sortType)) {
			sort = new Sort(Direction.ASC, "title");
		}

		return new PageRequest(pageNumber - 1, pagzSize, sort);
	}
A中关联Bid和Cid Cid对应多个Bid 现在又参数Cid 需要查询对应的Bid 也就是多表查询,但是还需要分页功能 也就是说参数可能会有个page。
whos2002110 2015-03-19
  • 打赏
  • 举报
回复
引用 1 楼 whos2002110 的回复:

@Query("select a.b from A a where a.c.id = ?1")
?1 占位符对应findAll方法的第一个入参。 我也没怎么用过spring data jpa 你理解一下,试试行不行。
这个第一个入参要传入CID,不知道你的spec是什么东西
whos2002110 2015-03-19
  • 打赏
  • 举报
回复

@Query("select a.b from A a where a.c.id = ?1")
?1 占位符对应findAll方法的第一个入参。 我也没怎么用过spring data jpa 你理解一下,试试行不行。

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧