【发布时间】:2021-10-24 05:31:30
【问题描述】:
后台域
我有每月存储在数据库中的产品的费率。开始日期始终是上个月的最后一天,结束日期是当月的最后一天。例如,2020 年 3 月汇率的开始日期为 2020 年 2 月 29 日,结束日期为 2020 年 3 月 31 日。
当前实施
这是Rate 类:
@Entity
@Data
public class Rate {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name="productId")
@JsonBackReference
private Product product;
private LocalDate startDate;
private LocalDate endDate;
private BigDecimal value;
}
我有一个 Spring Data 存储库,它具有以下方法:
Rate findByProductIdAndStartDateAndEndDate(
@Param("productId") Long productId,
@Param("startDate") @DateTimeFormat(iso=DateTimeFormat.ISO.DATE) LocalDate startDate,
@Param("endDate") @DateTimeFormat(iso=DateTimeFormat.ISO.DATE) LocalDate endDate);
目标
我想通过(例如)通过重写findByProductIdAndStartDateAndEndDate 来调用Rate 存储库来从客户那里抽象出这个细节,如下所示:
//OK with writing JPQL here via @Query
Rate findByProductIdAndYearMonth(
@Param("productId") Long productId,
@Param("yearMonth") @DateTimeFormat(iso=DateTimeFormat.ISO.DATE) YearMonth yearMonth);
我尝试过/考虑过的事情
在阅读this post 后,我考虑过AttributeConverter。但我正在尝试从一个字段 yearMonth 转换为两个数据库列 startDate 和 endDate。
我知道我可以编写一个服务类来获取 YearMonth,然后在确定开始和结束日期后调用 repo。但我正在使用 Spring Data REST 并希望允许客户端通过以下方式直接调用此 repo:
/api/rates/search/findByProductIdAndYearMonth
【问题讨论】:
-
用
@Query注释findByProductIdAndYearMonth怎么样?然后编写您的自定义查询。只是一个提示。我不擅长 JPQL。
标签: hibernate jpa spring-data-jpa spring-data spring-data-rest