Исключение запроса Couchbase во время выполнения. Неподдерживаемый тип параметра для ключа: класс com.couchbase.client.protocol.views.Query.
Я получаю это исключение каждый раз, когда пытаюсь запросить представление о Couchbase DB из моего весеннего загрузочного приложения. Неподдерживаемый тип параметра для ключа: класс 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 на CouchBase DB
function (doc) {
emit(doc.name, doc);
}
1 ответ
Какую версию spring-data-couchbase вы используете? Начиная с 2.x, @Query
аннотация использует вывод запроса, и вы не можете использовать ViewQuery
как параметр больше... Посмотрите на документы, на вывод запроса с представлением.
Вы могли бы, вероятно, использовать CouchbaseTemplate
выполнить ручной запрос, хотя.