Я использую Spring JPA и Hibernate для создания REST API.Я ищу в течение 2 дней, но я не нашел решения, чтобы решить эту проблему.
В некоторых запросах у меня есть несколько предложений JOIN FETCH.Когда я выполняю свой запрос, у меня в родительском наборе несколько раз появляется родительский объект, фактически точно так же часто, как у отца есть дети.
Пример:
@Query("SELECT DISTINCT p AS post," +
" <some subquery>" +
"FROM Post p JOIN FETCH p.user u LEFT JOIN FETCH p.linkedUsers INNER JOIN FETCH p.track track "
"WHERE ( (<some condition>) OR p.user = :me) " +
"ORDER BY p.created DESC")
List<Object []> getData(@Param("me")User me,
Pageable pageable);
Например, если у меня есть сообщение с2 связанных пользователя, мой пост появится как минимум 2 раза в моем наборе результатов.Если я не выполняю JOIN FETCH или другое JOIN, данные загружаются лениво.Но это не цель для меня, так как это приводит к плохой работе.
Редактировать: Мой вопрос в том, как выполнить один запрос, при котором все данные извлекаются и все сообщения, удовлетворяющие заданным критериям, имеют ОДИН раз в моем наборе результатов.
Редактировать:
Пример объекта:
[{
"id": 1767,
"track": {
"id": 1766,
"title": "VVS",
...
"streams": [
{
"id": 1764,
....
},
{
"id": 1765,
...
}
],
"isrc": "DEQ021801393"
},
"user": {
"id": 999998,
"username": "My username",
....
},
"created": "2018-08-21T22:18:56.451Z",
...
"linked_users": []
},
<this object another time, beacause two stream objects in track>
<many other objects two times>
...
]
Редактировать:
Оказалось, что подзапросы находятся в конфликте с "отличным",Если я удаляю их из запроса, я получаю различные сообщения.Если я отредактирую собственный SQL-запрос и изменим «отличный» на «отличный от», он будет работать.Но я думаю, что в режиме гибернации не существует отдельного предложения.Так какие-нибудь хорошие идеи, что делать?
Буду признателен за любую помощь:)