Нулевая проблема со списком объектов в ответе HQL-запроса - PullRequest
0 голосов
/ 05 декабря 2018

Я публикую это здесь, потому что столкнулся с проблемой и не могу найти способ ее решить.Я уже искал решения повсюду, но не нашел ничего, что могло бы меня удивить.

Для своего проекта я использую hibernate и Spring Boot.

У меня есть следующие классы:

A.java

@Entity 
@Table(name = "a")
@Data
public class A implements Serializable {
   private static final long serialVersionUID = 1L;
   ...
   @OneToMany(fetch = FetchType.LAZY, mappedBy = "audit", cascade = CascadeType.ALL)
    private List<AAD> aADs;
   ...
}

AAD.java

@Entity
@Table(name = "a_a_d")
@Data
public class AAD implements Serializable {
    private static final long serialVersionUID = 1L;
    ...
    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "b_id")
    private B b;
    ...
    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "A_id")
    private A a;
}

B.java

@Entity
@Table(name = "b")
@Inheritance(strategy = InheritanceType.JOINED)
@Data
public class B implements Serializable {
    private static final long serialVersionUID = 1L;
    ...
    @Column(nullable = false, name = "price")
    private Double price;
    ...
}

Когда я пытаюсь запросить некоторую информацию в моем ARepositoryImpl без какого-либо фильтра, как следует

StringBuilder request = new StringBuilder("SELECT DISTINCT a FROM A a LEFT JOIN a.aADs aad LEFT JOIN aad.b b");
Query queryPhase1 = getEntityManager().createQuery(request.toString());
finalResult = queryPhase1.getResultList();

IПолучите мои результаты, как и ожидалось, со всей информацией:

 - 0 = {A@18952}
       _ id = {Long@19678} 2
         ...
       _ aADs = {PersistentBag@1978} size = 2
           - 0 = {B@12346}
           - 1 = {B@25463}
                _ id = {Long@123547} 1
                  ...
                _ price = {Double@125487} 17.0
 - 1 = {A@5478}
    ...
 - 2 = {A@1234}
    ...

Но как только я добавлю фильтр, у меня будет нулевой результат.В этот момент я полностью его потерял :(

StringBuilder request = new StringBuilder("SELECT DISTINCT a FROM A a LEFT JOIN a.aADs aad LEFT JOIN aad.b b WHERE b.price=17.0"); 
// I saw in the previous result that a B.price was equals to 17.0 so i try to filter on it so i obtain only my A objects which have a B.price = 17.0
// I should at least obtain {A@18952} in the reuslt of this query if i look my previous result
    Query queryPhase1 = getEntityManager().createQuery(request.toString());
    finalResult = queryPhase1.getResultList();

Более того, это не ошибка, просто пустой список в конце запроса. Я попытался переформатировать свой запрос и выполнить поиск непосредственно по aad (без использованияоставил соединение), но у меня возникает ошибка разыменования, когда я пытаюсь это сделать.

Кто-то с подсказкой или ответом на вопрос «Разблокирует меня» действительно спасет меня, потому что скоро у меня не будет волос: /

Спасибо за ваше время и извините за длинный пост. Вот этот сладкий картофельный поцелуй

PS: Я не думаю, что это дубликат другого поста, потому что я просмотрелна весь день, если я ошибаюсь, я был бы очень признателен за ваши ссылки, ребята!


РЕДАКТИРОВАТЬ

Я постараюсь получить свой запрос отЯ использую обходной путь, чтобы получить мою информацию, я надеюсь, что это сработает. Сначала я отфильтрую по B и верну свой ID, затем я буду искать мои AAD объекты (и, таким образом, мои A объекты) благодаряэти идентификаторы.


РЕДАКТИРОВАТЬ 2

Мой обходной путь - получение информации, как и ожидалось, я буду держать ее в курсе, пока не найду исправления в предыдущем случае.Если кто-то что-то знает, пожалуйста, скажите мне, что я был бы очень признателен!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...