假设我有以下Groovy类(或Java中的等价物)
class User {
Long id
String name
}
我想编写一个Hibernate查询(HQL或Criteria),它返回至少有一个其他用户具有相同名称的所有用户。
更新
建议使用以下查询
select min(user.id), user.name
from User user
group by user.name
having count(user.name) > 1
然而,这有一些问题:
谢谢, 唐
答案 0 :(得分:5)
我会尝试这样的事情:
select min(user.id), user.name
from User user
group by user.name
having count(user.name) > 1
请注意,根据the documentation,如果底层数据库支持(即不在MySQL中),则在having和order by子句中允许使用 SQL函数和聚合函数。
编辑:应该可以检索具有IN的用户(我不认为查询性能会非常好):
from User u
where u.name IN (
select user.name
from User user
group by user.name
having count(user.name) > 1)
答案 1 :(得分:0)
String hql = "select columnName form entityName";
Query query = session.createQuery(hql);
arrayList = query.list();
int countOFRecords=Collections.frequency(arrayList , recordName)
答案 2 :(得分:-1)
我认为您正在寻找用户名的精确字符串匹配。此外,您还需要id上的主键,以便您可以判断用户是否具有相同的名称,但实际上是另一个用户。
您是否在User表上设置了主键?听起来你正在获得重复,因为你正在搜索的字符串是主键。 Hibernate要求您将主键放在表/对象上。