如果表(非常大的表)中存在任何具有相同 ID(不是主键)的重复行,并且满足 where 子句,我必须打印一条消息。
表人是(表上没有索引)
PersonPrimaryKEY PersonName ID Email Address InvoiceID TaxID
1 Bob 1 bob@example.com 1/Harton st 1 1
2 John 2 john@example.com 2/Harton st 2 2
3 Peter 1123 peter@example.com 3/Harton st 3 3
我使用 hibernate
public Collection<Person> readByNameAndID (String name, String ID)
{
TypedQuery<Person> q = getEntityManager ().createNamedQuery("Select p FROM Person p WHERE Name =:Name AND ID <> :ID", Person.class);
q.setParameter ("Name", Name);
q.setParameter ("ID", ID);
return q.getResultList ();
}
使用的代码是
if(results.size > 0)
{
System.out.println("Error exists");
}
问题是,读取大表时效率非常低。
如何才能使其非常高效?我正在考虑使用 EXISTS 或 COUNT 来做到这一点,但如何将它与 hibernate 合并,以便它只返回一行,然后我检查大小 > 0,这将是有效的。
或者 setMaxResult 是唯一的解决方案吗?
谢谢
艾登
最佳答案
由于您正在考虑基于具有相同 PersonName
的记录重复,因此以下 HQL 查询应该可以解决问题:
SELECT COUNT(p)
FROM Person p
GROUP BY p.PersonName
HAVING COUNT(p) > 1
如果此查询的计数大于 0,则意味着存在重复项。
关于java - 在 hibernate 中使用 EXISTS 仅返回一行以提高性能(不使用 setMaxResult),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36734322/