0

Я получаю это исключение каждый раз, когда я пытаюсь запросить представление на базе Couchbase DB из моего приложения загрузки весной. Неподдерживаемый тип параметра для ключа: класс com.couchbase.client.protocol.views.Query.Исключение запроса Couchbase во время выполнения Неподдерживаемый тип параметра для ключа: класс com.couchbase.client.protocol.views.Query

Я установил строку в методе setKey() класса Query, получил исключение. Но затем я проверил API и предоставил json setKey, который все еще не работает. Много раз искали, но не могли заставить это работать.

Я использую фрагмент кода в этом сообщении.

Application.properties

spring.couchbase.bucket.password= 
spring.couchbase.bucket.name=default 
spring.couchbase.bootstrap-hosts=127.0.0.1 
spring.data.couchbase.repositories.enabled=true 

PlayerRepository

public interface PlayerRepository extends CouchbaseRepository<Player, Integer> 
{ 

    @View(designDocument = "player", viewName = "all") 
    public List<Player> findAll(); 
    @View(designDocument = "player", viewName = "by_Name") 
    public Player findByName(Query query); 
    @View(designDocument = "player", viewName = "by_TeamId") 
    public List<Player> findByTeamId(Query query); 

} 

Player.java

@Document 
public class Player 
{ 
    @Id 
    int playerId; 
    @Field 
    String name; 
    @Field 
    String type; 
    @Field 
    String country; 
    @Field 
    String playingHand; 
    @Field 
    String era; 
    @Field 
    int teamId; 
    @Field 
    int odiCenturies; 
    @Field 
    int testCenturies; 

    public Player(){} 


    public Player(int playerId, String name, String type, String country, String playingHand, String era, int teamId, 
      int odiCenturies, int testCenturies) { 
     super(); 
     this.playerId = playerId; 
     this.name = name; 
     this.type = type; 
     this.country = country; 
     this.playingHand = playingHand; 
     this.era = era; 
     this.teamId = teamId; 
     this.odiCenturies = odiCenturies; 
     this.testCenturies = testCenturies; 
    } 

SpringBootApplication класс

@SpringBootApplication общественного класса CricketTeamSelectionMain {

/** 
* @param args 
*/ 
public static void main(String[] args) 
{ 
    SpringApplication.run(CricketTeamSelectionMain.class, args); 

} 

@Configuration 
@EnableCouchbaseRepositories 
public static class DBConfig extends AbstractCouchbaseConfiguration 
{ 

    @Value("${spring.couchbase.bucket.name}") 
    private String bucketName; 

    @Value("${spring.couchbase.bucket.password}") 
    private String password; 

    @Value("${spring.couchbase.bootstrap-hosts}") 
    private String ip; 

    @Override 
    public String getBucketName() { 
     return this.bucketName; 
    } 

    @Override 
    public String getBucketPassword() { 
     return this.password; 
    } 

    @Override 
    public List<String> getBootstrapHosts() { 
     return Arrays.asList(this.ip); 
    } 

} 

}

PlayerService класс

package org.ups.fantasyCricket.service; 

import java.net.URI; 
import java.util.ArrayList; 
import java.util.List; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Service; 
import org.ups.fantasyCricket.CricketTeamSelectionMain.DBConfig; 
import org.ups.fantasyCricket.Model.Player; 
import org.ups.fantasyCricket.Repository.PlayerRepository; 

import com.couchbase.client.CouchbaseClient; 
import com.couchbase.client.protocol.views.Query; 
import com.couchbase.client.protocol.views.View; 
import com.couchbase.client.protocol.views.ViewResponse; 

@Service 
public class PlayerService 
{ 

    @Autowired 
    PlayerRepository playerRepo; 

    private CouchbaseClient client; 


    public List<Player> getAllPlayers() 
    { 
     List<Player> allPlayerLists = new ArrayList<Player>(); 
     /*allPlayerLists.addAll((Collection<? extends Player>) playerRepo.findAll()); 
     return allPlayerLists;*/ 
     playerRepo.findAll().forEach(allPlayerLists::add); 
     return allPlayerLists; 
    } 

    public Player getPlayerByName(String name) 
    { 
     DBConfig dbCon = new DBConfig(); 

     try 
     { 
      Query query = new Query(); 
      query.setIncludeDocs(true); 
      query.setKey(name); 
      Player player = playerRepo.findByName(query); 
      return player; 
     } 
     catch(Exception e) 
     { 
      e.printStackTrace(); 
      System.out.println(e.getMessage()); 
     } 
     return null; 

    } 

    public String addPlayer(Player player) 
    { 
     playerRepo.save(player); 
     return "Success"; 
    } 

    public String updatePlayer(Player player, int id) 
    { 
     playerRepo.save(player); 
     return "Success"; 
    } 

    public List<Player> getPlayersByTeamId(int teamId) 
    { 
     List<Player> allPlayerLists = new ArrayList<Player>(); 
     Query query = new Query(); 
     query.setKey(String.valueOf(teamId)); 
     playerRepo.findByTeamId(query).forEach(allPlayerLists::add); 
     return allPlayerLists; 

    } 

    public String addPlayers(List<Player> players) 
    { 
     playerRepo.save(players); 
     return "Success"; 
    } 
} 

Посмотреть by_Name на CouchBas e DB

function (doc) { 
emit(doc.name, doc); 
} 
+0

какая версия весна-данных-кушетка вы используете? –

ответ

0

В какой версии весна-данных-кушетки вы используете? Начиная с 2.x, аннотация @Query использует вывод запроса, и вы больше не можете использовать ViewQuery в качестве параметра ... Взгляните на документы, на вывод запроса с представлением.

Возможно, вы можете использовать CouchbaseTemplate для выполнения ручного запроса.