【发布时间】:2016-07-11 04:05:38
【问题描述】:
假设我有以下 2 个类:
@Entity
class Article {
@Id
int id;
@ManyToMany(mappedBy="articles")
List<Tag> tags;
}
@Entity
@NamedQueries({
@NamedQuery(name = "Tag.trends", query = "SELECT t FROM Tag t") // Some magic stuff here..
})
class Tag {
@Id
String name;
@ManyToMany
List<Articles> articles;
}
现在我想创建一个命名查询来选择最常用的标签。
所以这需要一个join、count和一个order by。但我似乎无法弄清楚这一点。
问题: 如何选择最常用的标签?
例如,如果以下文章具有以下标签:
Article: Tags
0: A, B
1: A
2: C
3: A, C
输出
A // 3 times
C // 2 times
B // 1 time
【问题讨论】:
-
您想对所有标签进行分组并获得计数和降序排列吗?
-
@Nicholas 我不确定是否要将它们分组。我想按文章类实例中出现的次数降序排列它们。
-
那里大概有一个连接表,因为没有一个 M-N 会有点没有意义
-
顺便说一句:我知道你想要标签表中的唯一标签,但你应该在标签表中放置一个约束并有一个整数或长 id 否则性能会很差。