Есть два стула… т.е. две таблицы.
CREATE TABLE scheme
(
id integer NOT NULL,
command character varying(1024),
CONSTRAINT scheme_pkey PRIMARY KEY (id)
)
и
CREATE TABLE task
(
id integer NOT NULL,
scheme_id integer NOT NULL,
CONSTRAINT task_pkey PRIMARY KEY (id),
CONSTRAINT task_to_scheme_fk FOREIGN KEY (scheme_id)
REFERENCES scheme (id) MATCH SIMPLE
ON UPDATE CASCADE
ON DELETE CASCADE
DEFERRABLE
)
К ним есть два JPA-класса.
@Entity
public class Scheme {
@Id
@GeneratedValue
private Integer id;
@Basic
private String command;
}
и
@Entity
public class Task {
@Id
@GeneratedValue
private Integer id;
@ManyToOne( optional = false )
@JoinColumn( name = "scheme_id" )
private Scheme scheme;
}
И мне надо посчитать сколько task у каждой scheme. В том же sql это делается просто:
SELECT scheme.id AS scm, count(task.id) AS cnt
FROM scheme
LEFT OUTER JOIN task on task.scheme_id = scheme.id
GROUP BY scheme.id
ORDER BY cnt ASC, scm ASC;
И вывод:
11 "0"
1 "4"
2 "4"
4 "4"
6 "4"
Вопрос, как сделать тот же запрос на JPQL? Т.к. что-то в лоб повторить запрос не вытанцовывается, все варианты выдают ошибку на этапе компиляции запроса.