【发布时间】:2015-10-13 11:12:08
【问题描述】:
我有一个名为 User 的实体类,其变量 username 和 ElementCollection 映射表示两个用户之间的“友谊”,由 userId、开始日期和朋友的 id 映射。该关系的代码如下:
@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 的所有朋友用户名。不知何故,这张地图让我很困惑,我找不到合适的说法。
非常感谢您对此的任何帮助。
编辑:澄清一下,我想为以下 SQL 语句使用自定义 @Query 语句:
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
【问题讨论】:
-
你能展示一些你尝试过的语句的代码吗?
-
大部分都删除了,但我基本上需要的是相当于“select u.username from users u joinfriendship m on u.userId = m.friendId where m.userId = 1;”跨度>