如何在spring数据之间编写自定义JPA查询?
How to write custom between spring data JPA query?
我有一个
实体
@Entity
public class PromoAmtRange implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name = "low")
private Integer low;
@Column(name = "high")
private Integer high;
@Column(name = "threshold")
private Integer threshold;
//
constructor & getters setters
}
及其
存储库
public interface PromoAmtRangeRepository extends JpaRepository<PromoAmtRange,Long> {
@Query("SELECT pa FROM PromoAmtRange pa WHERE :intValue BETWEEN pa.low AND pa.high")
PromoAmtRange findByThreshold(@Param("intValue") Integer intValue);
}
注意:如你所见,intValue不是实体class的成员变量。
我想在 intValue 下降到 BETWEEN low 和 high 时获取数据?
例如我有如图所示的数据库条目:
如果我的 intValue 是 50 我应该得到第一行,即
1 | 0 | 100 | 30
如何实现?
您可以使用JPA Native 查询。 (有可用答案about native query and maping)
您可以使用本机查询 like this
查询方式的结果可以通过关键字first或top来限定,两者可以交替使用。可以将可选数值附加到 top/first 以指定要返回的最大结果大小。
尝试:
public interface PromoAmtRangeRepository extends JpaRepository<PromoAmtRange,Long> {
@Query("SELECT pa FROM PromoAmtRange pa WHERE :intValue BETWEEN pa.low AND pa.high")
List<PromoAmtRange> findByThreshold(@Param("intValue") Integer intValue,Pageable pageable);
}
实施class:
List<PromoAmtRange> result = jpaRepository.findByThreshold(intValue, new PageRequest(0,10));
我有一个 实体
@Entity
public class PromoAmtRange implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name = "low")
private Integer low;
@Column(name = "high")
private Integer high;
@Column(name = "threshold")
private Integer threshold;
//
constructor & getters setters
}
及其 存储库
public interface PromoAmtRangeRepository extends JpaRepository<PromoAmtRange,Long> {
@Query("SELECT pa FROM PromoAmtRange pa WHERE :intValue BETWEEN pa.low AND pa.high")
PromoAmtRange findByThreshold(@Param("intValue") Integer intValue);
}
注意:如你所见,intValue不是实体class的成员变量。
我想在 intValue 下降到 BETWEEN low 和 high 时获取数据?
例如我有如图所示的数据库条目:
如果我的 intValue 是 50 我应该得到第一行,即
1 | 0 | 100 | 30
如何实现?
您可以使用JPA Native 查询。 (有可用答案about native query and maping)
您可以使用本机查询 like this
查询方式的结果可以通过关键字first或top来限定,两者可以交替使用。可以将可选数值附加到 top/first 以指定要返回的最大结果大小。
尝试:
public interface PromoAmtRangeRepository extends JpaRepository<PromoAmtRange,Long> {
@Query("SELECT pa FROM PromoAmtRange pa WHERE :intValue BETWEEN pa.low AND pa.high")
List<PromoAmtRange> findByThreshold(@Param("intValue") Integer intValue,Pageable pageable);
}
实施class:
List<PromoAmtRange> result = jpaRepository.findByThreshold(intValue, new PageRequest(0,10));