У меня есть репозиторий PagingAndSorting для простого приложения, состоящего из людей. Простая сортировка для такого свойства, как age, работает хорошо ...
Sort sort = Sort.by("age").ascending();
for (Person p : personRepository.findAll(sort)) {
log.info(p.toString());
}
Я хочу также отсортировать людей по lastName. Но я не создаю два атрибута для имени и фамилии. Я создал класс Name, который содержит имя и фамилию, и сделал атрибут 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;
}
}
Как мне сортировать по lastName (или firstName)? Что-то вроде
Sort sort = Sort.by("name").ascending();
for (Person p : personRepository.findAll(sort)) {
log.info(p.toString());
}
выполняется и не выдает ошибок (например, люди печатаются на консоли), но работает не так, как ожидалось.
Сортировка по возрастанию осуществляется с использованием firstName (не знаю почему).
Как получить сортировку на основе атрибута lastName имени класса?
Спасибо и всего наилучшего