Spring JPA: как сортировать по атрибуту, присутствующему во встроенном классе - PullRequest
0 голосов
/ 30 апреля 2020

Я попытался найти свою проблему в SO, но не смог найти ту, которая соответствует моей проблеме. Итак, давайте возьмем простой пример, в котором у меня есть класс сущностей и класс составного первичного ключа (встроенный).

@Embeddable
public class EmployeeId implements Serializable {
    @NonNull
    @Column(name = "start_date")
    private String startDate;
    @Column(name = "stop_date")
    private String stopDate;
    @Column(name = "empId")
    private int empId;
    @Column(name = "ssn")
    private String ssn;
}

Класс сущности:

@Entity(name = "employee")
public class EmployeeEntity {
    @EmbeddedId
    private EmployeeId employeeId ;
    @Column(name = "fName")
    private String fName;
    @Column(name = "lName")
    private String lName;
}

Класс репозитория:

@Repository
public interface EmployeeRepository extends JpaRepository<EmployeeEntity, EmployeeId> {
// The below method works and I can see the result sorted by first names
    List<EmployeeEntity> findByEmployeeId_EmpIdAndEmployeeId_SsnOrderByFNameDesc(int empId, String ssn);

// However let's say I want to order by start_date desc, I am not able to create the right method name here.
}

Мой вопрос в комментариях выше: как мне упорядочить или отсортировать, используя атрибут, присутствующий во встроенном классе идентификаторов, используя возможности JPA, такие как метод сортировки по имени, как показано выше?

Ответы [ 2 ]

1 голос
/ 01 мая 2020

Вы должны назвать запрос так, как вы его определили в своем классе. Далее EmployeeId - это тип встроенного идентификатора, а имя свойства - startDate, по которому вы хотите сделать заказ.

Так что используйте OrderByEmployeeIdStartDateDesc.

1 голос
/ 01 мая 2020
List<EmployeeEntity> findByEmployeeId_EmpIdAndEmployeeId_SsnOrderByEmployeeIdStartDateDesc(int empId, String ssn);

должно работать.

...