HQL. Как создать запрос, который возвращает все строки со списком <Point>между датами - PullRequest
0 голосов
/ 01 июля 2019

У меня есть две сущности: Линия и Точка

@Entity
@Table(name = "line")
public class Line {
    private long id;
    private String name;

    @OneToMany
    @JoinColumn(name = "line_id")
    private List<Point> points;
}

@Entity
@Table(name = "point")
public class Point {
    @Id
    private long id;

    @Column(name = "x")
    private LocalDateTime x;

    @Column(name = "y")
    private int y;
}

select * from line;
+----+----------------------+
| id | name                 | 
+----+----------------------+
|  1 | lineA                |         
|  2 | lineB                |  
+----+----------------------+  

select * from point;
+----+--------------------------------------+----------+
| id |              x             |     y   |  line_id |
+----+-------------------------------------------------+
|  1 | 2016-01-01 02:00:00.000000 |     1   |      1   |
|  2 | 2017-01-01 02:00:00.000000 |     2   |      1   |
|  3 | 2018-01-11 02:00:00.000000 |     1   |      1   |
|  4 | 2019-01-01 02:00:00.000000 |     3   |      1   |
|  5 | 2015-01-01 02:00:00.000000 |     2   |      2   |
|  6 | 2016-01-01 02:00:00.000000 |     1   |      2   |
|  7 | 2017-01-01 02:00:00.000000 |     3   |      2   |
|  8 | 2018-01-01 02:00:00.000000 |     2   |      2   |
+----+----------------------------+---------+----------+

Как должен выглядеть HQL-запрос, чтобы он возвращал список всех строк (List), содержащих точки между двумя датами?

entityManager.createQuery("select distinct l from Line l join l.points p where p.x between :sd and :ed)").setParameter("sd", LocalDateTime.of(2017, 1, 1, 0, 0)).setParameter("ed", LocalDateTime.of(2018, 1, 1, 0, 0)).getResultList()

Такой запрос вернет строки, в которых хотя бы одна точка находится в интервале между датами. В этом случае линия будет содержать все точки, которые у нее есть. Но мне нужно вернуть все строки, содержащие только точки между этими двумя датами.

Я подозреваю, что это довольно просто. Но из-за того, что я новичок в hql и в sql, я не знаю, как это сделать.

...