У меня есть 2 объекта: Project и ProjectStatus.JPA CriteriaQuery Order by Last Child Property
Entity проекта:
@Entity
public class Project {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Long id;
@OneToMany(mappedBy = "project")
private List<ProjectStatus> projectStatusses;
}
Статус проекта Entity:
@Entity
public class ProjectStatus {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Long id;
@ManyToOne
private Project project;
@Enumerated(EnumType.STRING)
private ProjectStatusType statusType;
}
Я хотел бы заказать проекты по их последним типом состояния с CriteriaQuery.orderBy
.
я придумал следующее:
CriteriaQuery<Project> criteriaQuery = criteriaBuilder.createQuery(Project.class);
Root<Project> root = criteriaQuery.from(Project.class);
Join<Project, ProjectStatus> join = root.join("projectStatusses", JoinType.LEFT);
criteriaQuery.orderBy(criteriaBuilder.asc(join.get("statusType")));
Я хочу выше запрос только взять последний статус проекта во внимание, но я не знаю, как сделать это. Как я могу это достичь?
Update: SQL, для достижения этой цели является:
SELECT proj.*, stat.statustype
FROM project proj
LEFT JOIN projectStatus stat ON proj.id = stat.project_id
WHERE stat.id = (SELECT MAX(id) FROM projectstatus WHERE project_id = proj.id)
ORDER BY stat.statustype
Я не понимаю ** последнего ** типа статуса части. Не могли бы вы прояснить это? –
Конечно, я хочу заказать проекты по значению поля ProjectStatus.statusType самой новой записи ProjectStatus в поле Projects.projectStatusses. – Max