如何在JPA中查找重复行

如何在JPA中查找重复行,jpa,spring-data-jpa,Jpa,Spring Data Jpa,有没有一种方法可以使用JPA在数据集中找到重复的条目 | id | text | ------------- | 1 | foo | | 2 | bar | | 3 | foo | 我只希望在我的集合中有条目1和条目3。 我不能让它在这个领域独树一帜 - DISTINCT会给我第1行和第2行 如果它是一个查询,是一个具有相同表的联接吗?我不知道那会怎样。我无法让小组成员正常工作 编辑 我相信您可以在不使用内部查询的情况下使用以下语法: SELECT id, text, COUNT(

有没有一种方法可以使用JPA在数据集中找到重复的条目

| id | text |
-------------
| 1  | foo  |
| 2  | bar  |
| 3  | foo  |
我只希望在我的集合中有条目1和条目3。 我不能让它在这个领域独树一帜

-

DISTINCT会给我第1行和第2行

如果它是一个查询,是一个具有相同表的联接吗?我不知道那会怎样。我无法让小组成员正常工作

编辑 我相信您可以在不使用内部查询的情况下使用以下语法:

SELECT id, text, COUNT(*) FROM entity GROUP BY text HAVING COUNT(*) > 1
编辑 我相信您可以在不使用内部查询的情况下使用以下语法:

SELECT id, text, COUNT(*) FROM entity GROUP BY text HAVING COUNT(*) > 1

您可以通过以下查询将常规做法从SQL应用到JPQL:

从实体e中选择e,其中e.text在实体d中按COUNT*>1的文本分组选择文本


子查询是必需的,因此您需要在文本列上建立索引才能使其高效。

您可以通过以下查询应用从SQL到JPQL的常见做法:

从实体e中选择e,其中e.text在实体d中按COUNT*>1的文本分组选择文本



子查询是必需的,因此您需要在文本列上建立索引才能使其高效。

我愿意接受计数并更改我的UI设计,但我也无法理解:-/为什么不进行查询?并设置where子句,以便将候选项与相同实体类型的子查询进行比较,并设置候选项与子查询之间的文本相同但id不同的条件。要查找text=foo的条目吗?是的,这是重复项。我想排除没有重复的行。@BillyFrost谢谢,这是一个有用的评论。可悲的是,我的SQL比我想象的更生锈。。。我想这就是Cascader给我的答案,我已经接受了计数并改变了我的UI设计,但我也不明白:-/为什么不做一个查询?并设置where子句,以便将候选项与相同实体类型的子查询进行比较,并设置候选项与子查询之间的文本相同但id不同的条件。要查找text=foo的条目吗?是的,这是重复项。我想排除没有重复的行。@BillyFrost谢谢,这是一个有用的评论。可悲的是,我的SQL比我想象的更生锈。。。我想这是Cascader给出的好建议的答案,但这会给我“foo”和“bar”,而不仅仅是“foo”,很抱歉一开始没有收到你的问题。我刚刚编辑了我的答案。是的,它可能不完全清楚,出于某种原因,我无法通过移动网站添加评论。谢谢,这看起来也是可行的;我非常喜欢这是一个单一的查询。我会试试这个,然后反馈说,这不起作用,JPA希望我在GROUPBY子句中有id,Wold把分组搞得一团糟,因为id是唯一的。这是个好建议,但这会给我“foo”和“bar”,而不仅仅是“foo”,抱歉一开始没有收到你的问题。我刚刚编辑了我的答案。是的,它可能不完全清楚,出于某种原因,我无法通过移动网站添加评论。谢谢,这看起来也是可行的;我非常喜欢这是一个单一的查询。我会试试这个,然后反馈说,这不起作用,JPA希望我在GROUPBY子句中有id,因为id是唯一的,“in”子句把分组搞砸了!谢谢你,我会尝试一下,并汇报进展。关于指数的好提示——这将变得很重要,因为这将处理大量数据。超级接近!从实体e中选择e,其中从实体d中选择文本中的e.text按计数大于1的文本分组-选择中的实体必须在分组依据列表中。谢谢“IN”条款!谢谢你,我会尝试一下,并汇报进展。关于指数的好提示——这将变得很重要,因为这将处理大量数据。超级接近!从实体e中选择e,其中从实体d中选择文本中的e.text按计数大于1的文本分组-选择中的实体必须在分组依据列表中。谢谢