如何避免在 Sort.by(...) 排序的分页请求处理程序中硬编码 JPA 实体属性名称?

时间:2021-08-01 21:36:01

标签: java spring-boot spring-mvc hardcode

我正在使用具有多个属性/表列的实体:

@Entity
public class History {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    @NotNull
    @Column
    ZonedDateTime dateCreated;

    @NotNull
    @Column
    private ZonedDateTime dateValidFrom;

    ...

我有一个带有处理程序的 Spring MVC 控制器,该处理程序返回按特定属性(例如 History)排序的 dateValidFrom 条目。下面的代码来自HistoryService

public List<History> findAll(int page, int pageSize) {
    PageRequest pageSettings = PageRequest.of(page, pageSize, Sort.by(Sort.Direction.ASC, "dateValidFrom"));
    return historyRepo.findAll(pageSettings).stream().collect(Collectors.toList());
}

如何避免使用硬编码的 dateValidFrom 属性名称并具有类型安全构造(在编译时检测重命名错误)?

1 个答案:

答案 0 :(得分:0)

<块引用>

JPA 2 定义了一个类型安全的 Criteria API,它允许使用所谓的静态 metamodel 类以强类型方式构造 Criteria 查询。见:JPA Static Model Generator

这些模型是静态类,允许您: _History.dateValidFrom 它返回字段名称的字符串,从而避免硬编码字符串。

检查 this answer 以了解如何生成这些静态模型: