У меня есть класс сущностей под названием User с переменным именем пользователя с картой ElementCollection, чтобы представлять «дружбу» между двумя пользователями, отображаемую идентификатором пользователя, датой начала и идентификатором друга. Код для этого отношения выглядит следующим образом:JPA Query ElementCollection key
@ElementCollection(fetch = FetchType.EAGER)
@CollectionTable(name = "friendship", joinColumns = @JoinColumn(name="userId"))
@MapKeyColumn(name = "friendId")
@Column(name = "startDate")
private Map<Integer, Date> friendShipMap;
Я хочу отображать друзей на странице профиля для каждого пользователя. Я знаю, что могу просто получить доступ к карте через Java и получить идентификаторы (и найти имена пользователей для таких друзей), но я бы хотел использовать пользовательский @Query, чтобы получить все имена пользователей пользователей для данного идентификатора. Каким-то образом карта меня сбивает с толку, и я не могу найти правильное заявление для этого.
Любая помощь на это очень ценится.
Edit: Для того, чтобы уточнить, я хотел бы использовать пользовательские @Query заявление на следующий SQL заявление:
select u.username from users u join friendship m on u.userId = m.friendId where m.userId = 1;
Так я думал, что это будет в основном так:
@Query("SELECT u.username FROM users u join u.friendShipMap m on u.userId = key(m) where m.userId = :userId")
List<User> getFriends(@Param("userId") int userId);
Но Я не могу использовать m.userId, он говорит: «Невозможно разделить скалярный элемент коллекции: userId».
Соответствующая таблица выглядит следующим образом:
userId | startDate |friendId
Можете ли вы показать код, с которым заявления вы пробовали? – Patrick
Удалили их в основном, но в чем я в принципе нуждаюсь, это эквивалент «выберите u.username от пользователей u, присоединитесь к дружбе m на u.userId = m.friendId, где m.userId = 1;" – Lukehey