我正在使用具有多个属性/表列的实体:
@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
它返回字段名的字符串,从而避免了硬编码字符串。
查看如何生成这些静态模型的答案: