Mysql 分页的自定义查询在spring boot JPA存储库中不起作用
在SpringJPA中使用分页时,我需要根据特定条件获取所有记录 我尝试了两种方法: 一,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、通道
@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;}为了帮助解决这个问题,我们必须了解您的数据结构。请为所有相关实体提供必要的字段