有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    您正在数据库中将name列的数据存储为firstName+" "+lastName

    因此,JPA按名称排序数据意味着按firstName+" "+lastName排序

    若在数据库的单独列中定义了firstname和lastname,那个么也可以按lastname进行排序。 你可以按照我的答案来解决这个问题