Hibernate:找到重复项

Dón*_*nal 1 java orm groovy hibernate hql

假设我有以下Groovy类(或Java中的等价物)

class User  {
    Long id
    String name
}
Run Code Online (Sandbox Code Playgroud)

我想编写一个Hibernate查询(HQL或Criteria),它返回至少有一个具有相同名称的其他用户的所有用户.

更新

建议使用以下查询

select min(user.id), user.name
from User user
group by user.name
having count(user.name) > 1
Run Code Online (Sandbox Code Playgroud)

但是,这有一些问题:

  • 它实际上并不返回User对象,只是它们的id和名称
  • 如果有3个用户名相同,则只返回其中一个用户的id,而我想要全部3个
  • 它可能不适用于MySQL,这是我正在使用的RDBMS.

谢谢,唐

Pas*_*ent 5

我会尝试这样的事情:

select min(user.id), user.name
from User user
group by user.name
having count(user.name) > 1
Run Code Online (Sandbox Code Playgroud)

请注意,根据文档,如果底层数据库(即不在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)
Run Code Online (Sandbox Code Playgroud)