java - spring data, PagingAndSorting repository, Sort based on (nested) attribute value of class type
问题描述
我有一个由 Persons 组成的简单应用程序的 PagingAndSorting 存储库。像年龄这样的属性的简单排序效果很好......
Sort sort = Sort.by("age").ascending();
for (Person p : personRepository.findAll(sort)) {
log.info(p.toString());
}
我也想按姓氏对人进行排序。但我没有为名字和姓氏创建两个属性。我创建了一个包含名字和姓氏的类 Name 并在 Person...
@Entity
public class Person {
// ...
@Convert(converter = NameAttributeConverter.class)
@Column
private Name name;
// ...
}
public final class Name implements Comparable, Serializable {
// ...
private String firstName;
private String lastName;
// ...
}
public class NameAttributeConverter implements AttributeConverter<Name,String> {
{
String firstName = attribute.getFirstName() == null ? " " : attribute.getFirstName();
String lastName = attribute.getLastname() == null ? " " : attribute.getLastname();
return firstName+" "+lastName;
}
public Name convertToEntityAttribute(String dbData) {
if(dbData!=null && dbData.split(" ").length > 0) {
String fname = dbData.split(" ")[0];
String lname = dbData.split(" ")[1];
return new Name(fname,' ',lname);
}
return null;
}
}
如何按姓(或名字)排序?就像是
Sort sort = Sort.by("name").ascending();
for (Person p : personRepository.findAll(sort)) {
log.info(p.toString());
}
执行并且没有错误(例如人被打印在控制台上)但没有像预期的那样工作。
它使用 firstName 升序排序(不知道为什么)。
如何根据类名的 lastName 属性进行排序?
谢谢并恭祝安康
解决方案
您将name
列的数据存储firstName+" "+lastName
在数据库中。
所以 JPA sort data by name 意味着 sort by firstName+" "+lastName
。
如果您在数据库单独的列中定义名字和姓氏,那么也可以按姓氏排序。您可以在此处按照我的回答来解决此问题。
推荐阅读
- r - 如何在 R 中安装 XCMS 包
- python-3.x - pymodm 找不到对象,而 pymongo 成功找到它
- javascript - 如何使用一个功能自行选择每个下拉列
- html - 垂直对齐的 inline-flexbox 的宽度随着子元素的数量而增长
- css - 当其中一个容器与内部中心对齐时,对齐顶部的两个 flex 容器
- django - 如何在 Jinja2/Django 中翻译变量
- linux - 如何使用 sed 或 awk 或类似的东西来替换每一个奇怪的字符?
- phpbb3 - PHPBB3:通过单个操作禁止和删除非活动用户(等待管理员接受的垃圾邮件发送者)
- excel - Excel VBA - 更改单元格时插入用户名
- swift - Swift 取消 DispatchQueue 进程