Ответ 1
Наконец, я смог найти простое решение без аннотации @Query
.
List<People> findDistinctByNameNotIn(List<String> names);
Конечно, я получил объект people вместо строк. Затем я могу внести изменения в java.
Я использую Spring для подключения к db. У меня есть расширение интерфейса CrudRepository<People, Long>
Вот запрос, который я хочу выполнить на db: 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)]
Наконец, я смог найти простое решение без аннотации @Query
.
List<People> findDistinctByNameNotIn(List<String> names);
Конечно, я получил объект people вместо строк. Затем я могу внести изменения в java.
Вы пробовали переписать свой запрос следующим образом?
@Query("SELECT DISTINCT p.name FROM People p WHERE p.name NOT IN ?1")
List<String> findNonReferencedNames(List<String> names);
Заметьте, я предполагаю, что ваш сущностный класс имеет имя People
, а не People
.
@Query("SELECT DISTINCT name FROM people WHERE name NOT IN (:names)")
List<String> findNonReferencedNames(@Param("names") List<String> names);
Не можете ли вы так использовать?
@Query("SELECT DISTINCT name FROM people p (nolock) WHERE p.name NOT IN (:myparam)")
List<String> findNonReferencedNames(@Param("myparam")List<String> names);
P.S. Я часто пишу запросы в SQL Server 2012, и использование nolock
в сервере - хорошая практика, вы можете игнорировать nolock
, если используется локальная db.
Кажется, что ваше имя db неправильно отображается (после того, как вы обновили свой вопрос)
@Query("SELECT distinct new com.model.referential.Asset(firefCode,firefDescription) FROM AssetClass ")
List<AssetClass> findDistinctAsset();