У меня есть следующий класс с именем UserInterest. Отсюда следует следующее определение:
@Table(name = "user_interests")
public class UserInterest {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "user_interest_pk_generator")
@SequenceGenerator(name = "user_interest_pk_generator", sequenceName = "user_interest_id_seq",
allocationSize = 1)
@Column(name = "user_interest_id")
private int userInterestId;
@Column(name = "user_id", nullable = false)
private int userId;
@ElementCollection
@CollectionTable(name = "user_interest_ids")
@Column(name = "interest_id")
private List<Integer> interests;
}
JPA автоматически создает встроенную таблицу user_interest_ids
, таблицу-коллекцию.
Этот класс работает нормально, интерес пользователя сохраняется корректно.
Теперь мне нужно отфильтровать пользователей по определенному списку интересов.
Допустим, у меня есть следующий список user_interest
:
И CollectionTable выглядит так:
Я хочу найти пользователей, у которых есть interest id 3
. В панели pgAdmin PostgreSQL запрос на фильтрацию interest_id =
3 возвращает следующую таблицу:
Я попытался реализовать этот запрос фильтра в Spring Data JPA в собственном запросе с помощью запроса внутреннего соединения:
@Query(value = "select user_id from user_interests inner join user_interest_ids on interest_id = ?1", nativeQuery = true)
Set<Integer> findUsersByInterest(int interestID);
Этот внутренний запрос на соединение возвращает всех пользователей, а не только пользователей с идентификатором интереса 3.
Я попытался найти некоторые полезные ресурсы здесь, в переполнении стека и других источниках в Интернете, к сожалению, мне не удалось найти полезные ресурсы для моей проблемы.
Не могли бы вы дать мне несколько советов, как реализовать этот запрос как собственный запрос в Spring Data JPA или некоторые ссылки на другие источники, где я мог бы найти полезный ресурс для моего вопроса.
Я действительно ценю твою помощь.
left
илиleft outer
, но это не сработало. Запрос следует такой:@Query(value = "select user_id from user_interests left outer join user_interest_ids on user_interest_ids.interest_id = ?1", nativeQuery = true)
- этот запрос не сработал. Наверное, мне нужно разобраться с таблицей соединений. - person Mamun   schedule 19.01.2021MEMBER
или в следующем запросе ` @Query (значение = выберите отдельный user_id из user_interests d внутреннее соединение d.user_interest_ids a где a.id = ?1, nativeQuery = true), the query shows an error for
где после слова'(', CROSS, FULL, INNER, JOIN, LEFT, NATURAL, ON, RIGHT, TABLESAMPLE or USING expected, got 'where
. - person Mamun   schedule 19.01.2021@query
в Spring Data JAP. Я не понимаю, почему в моем@query
это вызывает ошибку. - person Mamun   schedule 19.01.2021