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

2022-08-31 20:44:52

我正在使用Spring连接到db。我有一个扩展的接口 这是我想在db上执行的查询:.我宁愿在没有任何sql注释的情况下执行此操作,因此,如果没有,那就好了。CrudRepository<People, Long>SELECT DISTINCT name FROM people WHERE name NOT IN UserInputSetNOT

有没有办法做到这一点?我看了看春天的文档,但我找不到任何东西(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)]

答案 1

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

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

当然,我得到了 people 对象,而不仅仅是 Strings。然后,我可以在java中进行更改。


答案 2

您是否尝试过像这样重新措辞您的查询?

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

请注意,我假设您的实体类被命名为 ,而不是 。Peoplepeople


推荐