Я публикую это здесь, потому что столкнулся с проблемой и не могу найти способ ее решить.Я уже искал решения повсюду, но не нашел ничего, что могло бы меня удивить.
Для своего проекта я использую 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
Мой обходной путь - получение информации, как и ожидалось, я буду держать ее в курсе, пока не найду исправления в предыдущем случае.Если кто-то что-то знает, пожалуйста, скажите мне, что я был бы очень признателен!