Is there any way to write custom or native queries in Java JPA (DocumentDbRepository) while firing a query to azure-cosmosdb?

爱⌒轻易说出口 提交于 2020-04-17 21:25:47

问题


Connected to azure-cosmosdb and able to fire default queries like findAll() and findById(String Id). But I can't write a native query using @Query annotation as the code is not considering it. Always considering the name of the function in respository class/interface. I need a way to fire a custom or native query to azure-cosmos db. ?!

Tried with @Query annotation. But not working.

  1. List<MonitoringSessions> findBySessionID(@Param("sessionID") String sessionID);
    
  2. @Query(nativeQuery = true, value = "SELECT * FROM MonitoringSessions M WHERE M.sessionID like :sessionID")
    List<MonitoringSessions> findSessions(@Param("sessionID") String sessionID);
    

findBySessionID() is working as expected. findSessions() is not working. Below root error came while running the code.

Caused by: org.springframework.data.mapping.PropertyReferenceException: No property findSessions found for type MonitoringSessions


回答1:


Thanks for the response. I got what I exactly wanted from the below link. Credit goes to Author of the link page.

https://cosmosdb.github.io/labs/java/technical_deep_dive/03-querying_the_database_using_sql.html

public class Program {

 private final ExecutorService executorService;
 private final Scheduler scheduler;
 private AsyncDocumentClient client;

 private final String databaseName = "UniversityDatabase";
 private final String collectionId = "StudentCollection";

 private int numberOfDocuments;

 public Program() {
     // public constructor
     executorService = Executors.newFixedThreadPool(100);
     scheduler = Schedulers.from(executorService);
     client = new AsyncDocumentClient.Builder().withServiceEndpoint("uri")
             .withMasterKeyOrResourceToken("key")
             .withConnectionPolicy(ConnectionPolicy.GetDefault()).withConsistencyLevel(ConsistencyLevel.Eventual)
             .build();

 }

 public static void main(String[] args) throws InterruptedException, JSONException {
     FeedOptions options = new FeedOptions();
     // as this is a multi collection enable cross partition query
     options.setEnableCrossPartitionQuery(true);
     // note that setMaxItemCount sets the number of items to return in a single page
     // result
     options.setMaxItemCount(5);
     String sql = "SELECT TOP 5 s.studentAlias FROM coll s WHERE s.enrollmentYear = 2018 ORDER BY s.studentAlias";
     Program p = new Program();
     Observable<FeedResponse<Document>> documentQueryObservable = p.client
                     .queryDocuments("dbs/" + p.databaseName + "/colls/" + p.collectionId, sql, options);
     // observable to an iterator
     Iterator<FeedResponse<Document>> it = documentQueryObservable.toBlocking().getIterator();

     while (it.hasNext()) {
             FeedResponse<Document> page = it.next();
             List<Document> results = page.getResults();
             // here we iterate over all the items in the page result
             for (Object doc : results) {
                     System.out.println(doc);
             }
     }

 }

}



来源:https://stackoverflow.com/questions/57907452/is-there-any-way-to-write-custom-or-native-queries-in-java-jpa-documentdbreposi

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!