社区首页 >问答首页 >ManyToMany表上的SpringBoot2-JPA+可分页问题

ManyToMany表上的SpringBoot2-JPA+可分页问题
EN

Stack Overflow用户
提问于 2020-08-09 19:34:18
回答 1查看 42关注 0票数 0

在Spring 2 JPA中,我有以下两个多到多个实体。

1-劳动:

代码语言:javascript
代码运行次数:0
复制
@Entity
public class Labor {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;
    @Column(length = 100, nullable = false)
    private String name;
    @Column(length = 50)
    private String mobile;
    private Date dateOfBirth;
    private boolean male;
    private boolean active;
    private String brife;
    @Column(length = 500)
    private String specifcation;
    @ManyToMany(cascade = CascadeType.ALL)
    @JoinTable(name = "labor_tag",
            joinColumns = @JoinColumn(name = "labor_id"),
            inverseJoinColumns = @JoinColumn(name = "tag_id"))
    private Set<Tag> tags = new HashSet<>();
}

和标签表:

代码语言:javascript
代码运行次数:0
复制
@Entity
public class Tag {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;
    @Column(length = 100, unique = true)
    private String name;
    private boolean active = true;
    @ManyToMany(cascade = CascadeType.ALL, mappedBy = "tags")
    @JsonIgnore
    private Set<Labor> labors = new HashSet<>();
}

然后,我定义了劳动存储库,以查询带有特定标签ID、性别或年龄的劳动者

代码语言:javascript
代码运行次数:0
复制
@Repository
public interface LaborReoistory extends JpaRepository<Labor, Long> {

    @Query("select l from Labor l join l.tags t where (:tid is null or t.id in :tid) and " +
            "(:isMale is null or :isMale = TRUE) and " +
            "((:startYear is null or :endYear is null or :startYear >  :endYear) or year(l.dateOfBirth) >= :startYear and year(l.dateOfBirth) <= :endYear)")
    Page<Labor> findLaborsByCondition(@Param("tid") final long[] tid,
                                      @Param("isMale") final Boolean isMale,
                                      @Param("startYear") final Integer startYear,
                                      @Param("endYear") final Integer endYear,
                                      final Pageable pageable);

}

当我在控制器中使用这个存储库时,我会在totalElements属性中找到Pagable返回到labor_tag中的记录的计数(在本例中是16条记录),但是我真正想要的是在给定条件下让totalElements依赖于Labors。JPA Pagable是否支持这样的查询,或者如何找到解决办法?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-09 22:46:28

加入后,将出现重复的Labor,但totalElements是使用查询的行总数的计数。因此,您应该使用Distinct on Labour来获得不同劳动的计数。

代码语言:javascript
代码运行次数:0
复制
@Query("select distinct l from Labor l join l.tags t where (:tid is null or t.id in :tid) and " +
            "(:isMale is null or :isMale = TRUE) and " +
            "((:startYear is null or :endYear is null or :startYear >  :endYear) or year(l.dateOfBirth) >= :startYear and year(l.dateOfBirth) <= :endYear)")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63333772

复制
相关文章
iOS - Swift UICollectionView横向分页的问题UICollectionView横向分页的问题
UICollectionView横向分页的问题 情况 直接看图 滚前 滚后 已经设置collectionView的isPagingEnabled为true了,可是出现了这种情况,原因就是collect
LinXunFeng
2018/06/29
1.3K0
Repeater控件的分页问题
以前做ASP的时间不算短,可是做ASP.NET我是个新手。前几天做项目,遇到一个问题,要求比较复杂的数据格式显示,用DataGrid非常难实现,后来改用了Repeater控件来实现。不过这样就带来一个新问题:怎么分页?Repeater没有内置的分页功能。后来自己试着写了一个,侥幸成功了。匆匆写就,肯定不完善,哪位高手有何高见请及时指正,很愿意与各位交流(zhoubin@mail.sdu.edu.cn)
Java架构师必看
2021/03/22
6040
mysql分表+分页查询
我们都知道,数据量大了,都要对数据库进行分库分表。奈何一直对分表及分表查询没什么概念,这里先不讲那么多概念,先直接演示一个demo。我们直接上车,请坐稳扶好。
用户10002156
2023/08/07
4810
mysql分表+分页查询
分表分页/跨库分页为什么这么难?
当业务数据达到一定量级(比如:mysql单表记录量>1千万)后,通常会考虑“分库分表”将数据分散到不同的库或表中,这样可以大大提高读/写性能。但是问题来了,对于 select * from table limit offset , pagesize 这种分页方式,原来一条语句就可以简单搞定的事情会变得很复杂,本文将与大家一起探讨分库分表后"分页"面临的新问题。
菩提树下的杨过
2020/02/13
1.7K0
Mongodb分页查询优化上
最近遇到mongo集群性能问题,主要体现在查询性能或者聚合性能慢(查询类似关系型数据库中select * from xx where a='xx',另外聚合类似group by+count、sum),nosql与关系型数据库存在很多类似,比如分页查询语句是比较常见问题,分页优化在数据库优化原理类似.常见分页场景需求(本次主要基于这2种场景进行优化介绍)
徐靖
2020/08/05
2K0
Mongodb分页查询优化上
datatables pagehelper分页问题
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/100422.html原文链接:
全栈程序员站长
2021/05/19
7450
Django Rest Framework 分页(上)
在 serializer.py 文件中添加 UserGroupSerializer 类函数
小团子
2019/07/18
6880
Django Rest Framework 分页(上)
mybatis oracle 分页查询_oracle分页查询出现重复的问题
Oracle中分页查询因为存在伪列rownum,sql语句写起来较为复杂,现在介绍一种通过使用MyBatis中的RowBounds进行分页查询,非常方便。
全栈程序员站长
2022/11/08
1.9K0
PlayFramework 2.x 技巧-@ManyToMany关联
1. 简介     实体之间的关联关系是刚入门的同学比较头疼的问题,但是在日常开发中又是比较重要的技巧,熟练的使用实体关联,能够使代码清晰易懂,并且节省宝贵的开发时间。通常情况下,对于存在关联关系的两个实体,我们会明确指定其中一个实体为关系的维护端,而另一个实体为关系的查询端(反向端)。对于OneToMany或ManyToOne关系,JPA规范明确指出以Many一端为关系的维护端,One一端为关系的查询端;而对于ManyToMany的关联关系,双方都可以作为关系的维护端,因此在日常的开发工作中会出现
joymufeng
2018/05/17
1.2K0
Oracle优化之单表分页优化
SQL> create table t_test as select * from dba_objects;
星哥玩云
2022/08/17
9200
MyBatis_Plus联表分页查询
当我们需要关联表格分页查询时,MyBatis_plus封装的单表方法已经满足不了我们的需求了,那么我们需要进行联表分页查询
关忆北.
2021/12/07
1.2K0
TypeORM 多对多查询实现
首先定义2个实体 Article 和 Category是多对多的关系,一篇文章可以有多个分类,一个分类可以包含多篇文章
狂奔滴小马
2021/11/15
3.3K0
Django admin Foreignkey ManyToMany list_display展示
对于上面的model,如果要在django admin中展示ghosts信息,那么在list_display中直接加入’ghosts’ 会报下面的错误:The value of ‘list_display[1]’ must not be a ManyToManyField.
obaby
2023/02/24
7660
缓存遇到的数据过滤与分页问题
遇到的问题 1、最初阶段 系统中做了一个监控功能,用于记录所有的请求数据,数据插入频繁,量非常大,比如一天1000万条。考虑到数据插入的效率,就使用内存KV缓存来保存。写入过程是在接收到请求后放入到线程池中,然后线程池异步处理后写入。到这问题基本上没什么事情。 2、新的需求 后面数据保存了,就需要在运维系统中可以查询到,所以这个缓存还必须是分布式的。于是就换成了redis,这样系统都可以连接到。但是数据量太大,需要分页查询,这就有点头痛了。还好redis是可以支持有序集合的,而且可以通过zrange来获取指
用户1105954
2018/01/12
2.4K0
修改CSS ,解决帝国分页错位的问题
做了个养生网站,是用的现成的帝国模板,分页代码那里宽度是固定的,下一页之类三个字的就成了两行,网上搜了一下,知道是CSS问题。 于是: 1、查看模板及源码,找出是哪个CSS代码。 2、从CSS文件中找出这代码 3、修改代码的相应属性,搞定。 我的就是把public.css文件中的相对应width: 24px改成min-width: 24px,搞定。
用户1272546
2018/06/05
7800
SQL之美 - 分页查询的排序问题
编辑手记:前面我们分享过分页查询的基础知识,其目的就是控制输出结果集大小,将结果尽快的返回。主要有两种方式,一种是嵌套的查询方式,一种是通过范围控制分页的最大值和最小值。详情请阅读:让SQL成为一种生活方式:认识分页查询 今天来继续讨论分页查询的排序问题。 SQL> CREATE TABLE TEST AS SELECT ROWNUM ID, A.*FROM DBA_OBJECTS A; 表已创建。 SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS(USER,'TEST') P
数据和云
2018/03/07
1.7K0
Spring的学习笔记(十七)——SpringDataJpa动态查询和复杂的多表操作
有时我们在查询某个实体的时候,给定的条件是不固定的,这时就需要动态构建相应的查询语句,在Spring Data JPA中可以通过JpaSpecificationExecutor接口查询。相比JPQL,其优势是类型安全,更加的面向对象。
不愿意做鱼的小鲸鱼
2022/09/26
3.8K0
Mysql排序后分页,因数据重复导致分页数据紊乱的问题
前不久在写一个分页接口的时候,在测试阶段出现了排序结果紊乱且数据不正确的问题,那个接口是按照create_time进行排序的,但是对应的表中有很多相同create_time的数据,最后发现是因为 order by 排序的时候,如果排序字段中有多行相同的列值,则排序结果是不确定的。
翎野君
2023/05/12
8750
“ShardingCore”是如何针对分表下的分页进行优化的
首先还是要给自己的开原框架打个广告 sharding-core 针对efcore 2+版本的分表组件,首先我们来快速回顾下目前市面上分表下针对分页常见的集中解决方案
呆呆
2021/10/09
8720
点击加载更多

相似问题

如何在ManyToMany关联中获取表的分页结果

12

表分页问题

16

连接表上的HIbernate @manytomany条件

10

ManyToMany上的基本django模型问题

11

同一表上的ManyToMany

14
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文