java spring数据、分页和排序存储库、基于类类型的(嵌套)属性值排序
我有一个由人组成的简单应用程序的分页和排序存储库。 对像age这样的属性进行简单排序很有效
Sort sort = Sort.by("age").ascending();
for (Person p : personRepository.findAll(sort)) {
log.info(p.toString());
}
我也想按姓氏对人进行分类。但是我不会为名字和姓氏创建两个属性。我创建了一个包含名字和姓氏的类名,并亲自创建了这种类型的Name属性
@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());
}
执行并不会带来任何错误(例如,人员打印在控制台上),但不会像预期的那样工作
它使用名字进行升序排序(不知道为什么)
如何根据类名的lastName属性进行排序
谢谢和问候
# 1 楼答案
您正在数据库中将
name
列的数据存储为firstName+" "+lastName
因此,JPA按名称排序数据意味着按
firstName+" "+lastName
排序若在数据库的单独列中定义了firstname和lastname,那个么也可以按lastname进行排序。 你可以按照我的答案来解决这个问题