私は Spring を使用してデータベースに接続しています。 を拡張するインターフェイスがあります。CrudRepository<People, Long>
データベースで実行したいクエリは次のとおりですSELECT DISTINCT name FROM people WHERE name NOT IN UserInputSet
。SQL アノテーションなしで実行したいので、 なしで可能であればNOT
問題ありません。
それを実行する方法はありますか?春のドキュメントを見ましたが、何も見つかりません(クエリメソッドは、クエリの作成と実行に使用されます。)
これは私が試したのですが、機能しません。
@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 オブジェクトも取得しました。その後、Java で変更を行うことができます。