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

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

有办法吗? 我查看了春季文档,但我找不到任何内容( 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 findNonReferencedNames(List 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)] 

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

 List findDistinctByNameNotIn(List names); 

当然,我得到的是人物而不是只有弦乐。 然后我可以在java中进行更改。

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

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

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

 @Query("SELECT DISTINCT name FROM people WHERE name NOT IN (:names)") List findNonReferencedNames(@Param("names") List names); 

你不能这样用吗?

 @Query("SELECT DISTINCT name FROM people p (nolock) WHERE p.name NOT IN (:myparam)") List findNonReferencedNames(@Param("myparam")List names); 

PS我在SQL Server 2012中编写了很多查询,在服务器中使用nolock是一个很好的做法,如果使用本地数据库,你可以忽略nolock

好像您的数据库名称未正确映射(在更新问题后)