如何使用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
。
好像您的数据库名称未正确映射(在更新问题后)
- 使用hibernate注释导出模式
- 当数据正确显示时,为什么我在Spring MVC Web应用程序中获得Hibernate LazyInitializationException?
- 让Hibernate和SQL Server与VARCHAR和NVARCHAR一起玩得很好
- Hibernate throws无法删除或更新父行:外键约束失败
- 在hibernate统计中有什么是load和fetch之间的区别
- Spring – slf4J:如何自动记录错误和exception?
- Oracle遗留表没有很好的PK:如何hibernate?
- Hibernate没有在Spring Boot Project中抛出LazyInitializationException
- 值’0000-00-00’不能表示为java.sql.Date