我有一个名为User的实体类,其中带有ElementCollection地图的变量username代表两个用户之间的“友谊”,由userId映射,开始日期和朋友的ID。该关系的代码如下:JPA Query ElementCollection键
@ElementCollection(fetch = FetchType.EAGER)
@CollectionTable(name = "friendship", joinColumns = @JoinColumn(name="userId"))
@MapKeyColumn(name = "friendId")
@Column(name = "startDate")
private Map<Integer, Date> friendShipMap;
我想在每个用户的配置文件页面上显示好友。我知道我可以通过Java访问地图并获取id(并找到像这样的朋友的用户名),但我想使用自定义@Query来获取给定id的所有朋友用户名。不知何故,地图令我感到困惑,我无法为此找到合适的声明。
对此非常感谢。
编辑:为了澄清,我想用一个自定义@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从用户加入友谊m对u.userId = m.friendId其中m.userId = 1;” – Lukehey