如何使用 JPA 和 Spring 在列表中查找具有字段的不同行?

新手上路,请多包涵

我正在使用 Spring 连接到数据库。我有一个接口扩展 CrudRepository<People, Long> 这是我想在数据库上执行的查询: SELECT DISTINCT name FROM people WHERE name NOT IN UserInputSet 。我宁愿在没有任何 sql 注释的情况下执行它,所以如果没有 NOT 就可以了。

有办法吗?我查看了 spring 文档,但找不到任何内容( http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.query-methods.query-creation


这就是我累了但没有用的。

 @Query("SELECT DISTINCT name FROM people WHERE name NOT IN (?1)")
List<String> findNonReferencedNames(List<String> names);

这是我得到的例外:

 Error creating bean with name 'peopleRepository': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Validation failed for query for method public abstract java.util.List de.test.tasks.persistence.PeopleRepository.findNonReferencedNames(java.util.List)!

Caused by: java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: people is not mapped [SELECT name FROM people WHERE name NOT IN (?1)]

原文由 Paul Fournel 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 685
2 个回答

我终于能够找出一个没有 @Query 注释的简单解决方案。

 List<People> findDistinctByNameNotIn(List<String> names);

当然,我得到的是人对象,而不仅仅是字符串。然后我可以在 java 中进行更改。

原文由 Paul Fournel 发布,翻译遵循 CC BY-SA 3.0 许可协议

您是否尝试过像这样改写您的查询?

 @Query("SELECT DISTINCT p.name FROM People p WHERE p.name NOT IN ?1")
List<String> findNonReferencedNames(List<String> names);

请注意,我假设您的实体类名为 People ,而不是 people

原文由 pioto 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题