簡體   English   中英

Hibernate:找到重復項

[英]Hibernate: find duplicates

假設我有以下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

但是,這有一些問題:

  • 它實際上並不返回User對象,只是它們的id和名稱
  • 如果有3個用戶名相同,則只返回其中一個用戶的id,而我想要全部3個
  • 它可能不適用於MySQL,這是我正在使用的RDBMS。

謝謝,唐

我會嘗試這樣的事情:

select min(user.id), user.name
from User user
group by user.name
having count(user.name) > 1

請注意,根據文檔如果底層數據庫(即不在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)
String hql = "select columnName form entityName";
Query query = session.createQuery(hql);
arrayList =   query.list();

int countOFRecords=Collections.frequency(arrayList , recordName)

我假設您正在尋找用戶名的精確字符串匹配。 此外,您還需要id上的主鍵,以便您可以判斷用戶是否具有相同的名稱,但實際上是另一個用戶。

您是否在User表上設置了主鍵? 聽起來你正在獲得重復,因為你正在搜索的字符串是主鍵。 Hibernate要求您將主鍵放在表/對象上。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM