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



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

@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属性名称,并有一个类型安全的结构(检测重命名错误在编译时)?

JPA 2定义了一个类型安全标准API它允许以强类型的方式构造Criteria查询,利用所谓的静态metamodel类。参见:JPA静态模型生成器

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

查看如何生成这些静态模型的答案:

相关内容

  • 没有找到相关文章

最新更新