Mysql 分页的自定义查询在spring boot JPA存储库中不起作用

Mysql 分页的自定义查询在spring boot JPA存储库中不起作用,mysql,sql,spring,spring-boot,spring-data-jpa,Mysql,Sql,Spring,Spring Boot,Spring Data Jpa,在SpringJPA中使用分页时,我需要根据特定条件获取所有记录 我尝试了两种方法: 一, @Query(value=“从通道c、通道计划cp、通道定价cpr中选择*,其中c.id=cp.channel\U id和cp.id=cpr.plans\U id以及cpr.validity\U开始和cpr.validity\U结束和cpr.is\U active=1”之间的当前时间戳,nativeQuery=true) 页面findAll(可分页可分页); @Query(value=“从通道c、通道

在SpringJPA中使用分页时,我需要根据特定条件获取所有记录

我尝试了两种方法:

一,

@Query(value=“从通道c、通道计划cp、通道定价cpr中选择*,其中c.id=cp.channel\U id和cp.id=cpr.plans\U id以及cpr.validity\U开始和cpr.validity\U结束和cpr.is\U active=1”之间的当前时间戳,nativeQuery=true)
页面findAll(可分页可分页);
  • @Query(value=“从通道c、通道计划cp、通道定价cpr中选择*,其中c.id=cp.channel\U id和cp.id=cpr.plans\U id以及cpr.validity\U开始和cpr.validity\U结束之间的当前时间戳和cpr.is\u active=1”,
    countQuery=“从通道c、通道计划cp、通道定价cpr中选择计数(*),其中c.id=cp.channel\U id和cp.id=cpr.plans\U id以及cpr.validity\U开始和cpr.validity\U结束之间的当前时间戳和cpr.is\u active=1”,nativeQuery=true)
    页面findAll(可分页可分页);
    
    实体:

    @Entity
    public class ChannelPricing {
        @Id
        private int id; 
        
        @Column(name="validity_start") 
        private String validityStart; 
    
        @Column(name="validity_end")
        private String validityEnd; 
    
        @Column(name="is_active") 
        private int isActive;
    
        // other entity fields, getters, setters, equals, toString etc...
    }
    @Entity
        public class Channel {
            @Id
            @GeneratedValue(strategy = GenerationType.IDENTITY)
            private int id;
            
            @OneToMany(cascade = CascadeType.ALL)
            @JoinColumn(name = "channel_id",referencedColumnName = "id")
            private List<ChannelPlans> plans;
            
            // other entity fields, getters, setters, equals, toString etc...
            }
    @Entity
        public class ChannelPlans {
        
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @JsonIgnore
        private int id;
        
        @OneToMany(cascade = CascadeType.ALL)
        @JoinColumn(name="plans_id",referencedColumnName ="id")
        private List<ChannelPricing> priceInfo;
        // other entity fields, getters, setters, equals, toString etc...
        }
    
    @Entity
    public class Channel {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private int id;
            
        @OneToMany(mappedBy = "channel", cascade = CascadeType.ALL)
        private List<ChannelPlans> plans;
            
        // other entity fields, getters, setters, equals, toString etc...
    }
    
    @Entity
    public class ChannelPlans {    
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @JsonIgnore
        private int id;
    
        @ManyToOne
        @JoinColumn(name = "channel_id")
        Channel channel;
        
        @OneToMany(mappedBy = "channelPlans", cascade = CascadeType.ALL)
        private List<ChannelPricing> priceInfo;
        // other entity fields, getters, setters, equals, toString etc...
    }
    
    @Entity
    public class ChannelPricing {
        @Id
        private int id; 
    
        @ManyToOne
        @JoinColumn(name = "plans_id")
        ChannelPlans channelPlans;
        
        @Column(name="validity_start") 
        private LocalDateTime validityStart; 
    
        @Column(name="validity_end")
        private LocalDateTime validityEnd; 
    
        @Column(name="is_active") 
        private int isActive;
    
        // other entity fields, getters, setters, equals, toString etc...
    }
    
    @实体
    公共类频道定价{
    @身份证
    私有int-id;
    @列(name=“validity\u start”)
    私有字符串validityStart;
    @列(name=“有效性\结束”)
    私有字符串validityEnd;
    @列(name=“处于活动状态”)
    私人干涉;
    //其他实体字段、getter、setter、equals、toString等。。。
    }
    @实体
    公共类频道{
    @身份证
    @GeneratedValue(策略=GenerationType.IDENTITY)
    私有int-id;
    @OneToMany(级联=级联类型.ALL)
    @JoinColumn(name=“channel\u id”,referencedColumnName=“id”)
    私人清单计划;
    //其他实体字段、getter、setter、equals、toString等。。。
    }
    @实体
    公共课程计划{
    @身份证
    @GeneratedValue(策略=GenerationType.IDENTITY)
    @杰索尼奥雷
    私有int-id;
    @OneToMany(级联=级联类型.ALL)
    @JoinColumn(name=“plans\u id”,referencedColumnName=“id”)
    私人清单价格信息;
    //其他实体字段、getter、setter、equals、toString等。。。
    }
    
    我想获取所有活动记录(
    is\u active=1
    )。但在这两种方法中,我都会收到活动和非活动记录


    此查询似乎未执行。请您帮助我了解我是否遗漏了任何内容?

    如果
    频道中的任何频道至少有一个活动价格,您的查询将返回该价格。
    Channel
    实例将包含所有
    channelplan
    ,其中包含所有
    ChannelPricing
    (活动和非活动)。您无法在另一个实体中获取
    ChannelPricing
    列表的一部分。允许保持列表延迟加载或获取完整列表

    要获得活动的
    ChannelPricing
    只有查询应返回
    页面

    实体:

    @Entity
    public class ChannelPricing {
        @Id
        private int id; 
        
        @Column(name="validity_start") 
        private String validityStart; 
    
        @Column(name="validity_end")
        private String validityEnd; 
    
        @Column(name="is_active") 
        private int isActive;
    
        // other entity fields, getters, setters, equals, toString etc...
    }
    @Entity
        public class Channel {
            @Id
            @GeneratedValue(strategy = GenerationType.IDENTITY)
            private int id;
            
            @OneToMany(cascade = CascadeType.ALL)
            @JoinColumn(name = "channel_id",referencedColumnName = "id")
            private List<ChannelPlans> plans;
            
            // other entity fields, getters, setters, equals, toString etc...
            }
    @Entity
        public class ChannelPlans {
        
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @JsonIgnore
        private int id;
        
        @OneToMany(cascade = CascadeType.ALL)
        @JoinColumn(name="plans_id",referencedColumnName ="id")
        private List<ChannelPricing> priceInfo;
        // other entity fields, getters, setters, equals, toString etc...
        }
    
    @Entity
    public class Channel {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private int id;
            
        @OneToMany(mappedBy = "channel", cascade = CascadeType.ALL)
        private List<ChannelPlans> plans;
            
        // other entity fields, getters, setters, equals, toString etc...
    }
    
    @Entity
    public class ChannelPlans {    
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @JsonIgnore
        private int id;
    
        @ManyToOne
        @JoinColumn(name = "channel_id")
        Channel channel;
        
        @OneToMany(mappedBy = "channelPlans", cascade = CascadeType.ALL)
        private List<ChannelPricing> priceInfo;
        // other entity fields, getters, setters, equals, toString etc...
    }
    
    @Entity
    public class ChannelPricing {
        @Id
        private int id; 
    
        @ManyToOne
        @JoinColumn(name = "plans_id")
        ChannelPlans channelPlans;
        
        @Column(name="validity_start") 
        private LocalDateTime validityStart; 
    
        @Column(name="validity_end")
        private LocalDateTime validityEnd; 
    
        @Column(name="is_active") 
        private int isActive;
    
        // other entity fields, getters, setters, equals, toString etc...
    }
    
    @实体
    公共类频道{
    @身份证
    @GeneratedValue(策略=GenerationType.IDENTITY)
    私有int-id;
    @OneToMany(mappedBy=“channel”,cascade=CascadeType.ALL)
    私人清单计划;
    //其他实体字段、getter、setter、equals、toString等。。。
    }
    @实体
    公共类计划{
    @身份证
    @GeneratedValue(策略=GenerationType.IDENTITY)
    @杰索尼奥雷
    私有int-id;
    @许多酮
    @JoinColumn(name=“channel\u id”)
    渠道;
    @OneToMany(mappedBy=“channelplan”,cascade=CascadeType.ALL)
    私人清单价格信息;
    //其他实体字段、getter、setter、equals、toString等。。。
    }
    @实体
    公共类频道定价{
    @身份证
    私有int-id;
    @许多酮
    @JoinColumn(name=“plans\u id”)
    渠道计划渠道计划;
    @列(name=“validity\u start”)
    私有LocalDateTime validityStart;
    @列(name=“有效性\结束”)
    私有LocalDateTime有效期;
    @列(name=“处于活动状态”)
    私人干涉;
    //其他实体字段、getter、setter、equals、toString等。。。
    }
    
    存储库:

    public interface ChannelPricingRepository extends JpaReposirory<ChannelPricing, Integer> {
        @Query("from ChannelPricing p where p.isActive=1 and p.validityStart<=now() and p.validityEnd>=now()")
        Page<ChannelPricing> getActivePrices(Pageable pageable);
    }
    
    public interface ChannelPricingRepository扩展了JpaReposirory{
    @查询(“来自ChannelPricing p,其中p.isActive=1和p.validityStart=now()”)
    Page getActivePrices(可分页可分页);
    }
    
    您应该提供额外的信息。您能否在问题中添加
    频道
    实体?你得到了什么结果?您希望得到什么结果?我希望获得所有活动的记录(is_active=1)。但是我收到了活动和非活动的记录。你能提供
    频道
    实体类吗?我想你需要频道定价来验证{private int id;private double rate;private int view;private int cpt;private int tvr;private int cpp;private String免责声明;private int spots;@Column(name=“spot\u rate”)private double spotRate;@Column(name=“spot\u length”)private int spotLength;@Column(name=“validity\u start”)private String validityStart;@Column(name=“validity\u end”)private String validityEnd;@Column(name=“rate\u card”)private int int rateCard;@Column(name=“is\u active”)private int isActive;}为了帮助解决这个问题,我们必须了解您的数据结构。请为所有相关实体提供必要的字段