Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
 spring+jpa+hiber custom condition  [new]
INFINITs
Member

Откуда:
Сообщений: 65
Добрый день, помоги написать условие для выбора данных

Есть 3 класса. Группа, в него входит лист родителей, а уже в родителя входит лист дочек.
+

public class GroupParent {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private Long id;

    @Column(name = "code", length = 128, unique = true)
    private String code;

    @Column(name = "name", length = 512)
    private String name;

    @JsonManagedReference
    @OneToMany(mappedBy = "parentGroup", cascade = CascadeType.ALL)
    @OrderColumn(name="id")
    Set<Parent> parents = new HashSet<>();
}

public class Parent {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private Long id;

    @JsonBackReference
    @ManyToOne
    @JoinColumn(name = "group_id")
    private GroupParent parentGroup;

    @Column(name = "code", length = 128, unique = true)
    private String code;

    @Column(name = "name", length = 512)
    private String name;

    @JsonManagedReference
    @OneToMany(mappedBy = "parent", cascade = CascadeType.ALL)
    @OrderColumn(name="id")
    Set<Child> childs = new HashSet<>();
}

public class Child {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private Long id;
    
    @JsonBackReference
    @ManyToOne
    @JoinColumn(name = "parent_id")
    private Parent parent;

    @Column(name = "code", length = 128, unique = true)
    private String code;

    @Column(name = "name", length = 512)
    private String name;

   @Column(name = "start_date")
    private LocalDateTime startDate; 

    @Column(name = "end_date")
    private LocalDateTime endDate;
}



Мне нужно выбрать все группы, всех родителей, но у родителя только действующую дочку.
т.е. запрос вида

FROM GroupParent pg " +
            " left join Parent p on n.parentGroup.id = pg.id "+
            " left join Child c on c.parent.id = p.id and c.startDate <= :date and (c.endDate >:date or ns.endDate is null )



В репозитории пытаюсь сделать следующее
@Query(" FROM GroupParent pg " +
            " left join Parent p on n.parentGroup.id = pg.id "+
            " left join Child c on c.parent.id = p.id and c.startDate <= :date and (c.endDate >:date or ns.endDate is null )")
    Iterable<GroupParent > findListCurrent(@Param("date") LocalDateTime date);


То получаю cast exception

Если добавить
@EntityGraph(attributePaths = { "parents","parents.childs"})
То hiber в запрос добавляет еще по 1 left join сущностей.

Можно ли как то указать что дочки я хочу только за фечить?



@EntityGraph(attributePaths = { "parents","parents.childs"})
@Query(" FROM GroupParent pg ")
вариант работает но без условия на дату, те формируется запрос вида
FROM GroupParent pg left join Parent p on n.parentGroup.id = pg.id left join Child c on c.parent.id = p.id
и нормально разбирается.
15 мар 19, 04:18    [21833196]     Ответить | Цитировать Сообщить модератору
Все форумы / Java Ответить