Использование пользовательских классов в типах коллекций с помощью Java-драйвера DataStax

Есть ли способ использовать наши типы (классы, которые мы предоставляем) в типах коллекций, которые мы предоставляем драйверу Java DataStax с помощью метода BoundStatement.setSet(..), без использования определяемых пользователем типов? Возможно, с API сопоставления объектов?

И если да, то когда мы создадим таблицу, что мы должны использовать для типа в SET (другими словами: SET<????>)?

Мы используем драйвер DataStax Java версии 2.1.5, подключенный к DSE версии 4.6.0 (Cassandra 2.0.11.83).

Вот пример для иллюстрации:

CREATE TABLE teams (uid TEXT PRIMARY KEY, players SET<????>);

Наш тип:

public class Player {

  private String name;

  public Player(String name) { this.name = name;   }

  public String getName() { return name;   }    
  public void setName(String name) { this.name = name; }

}

Контрольная работа:

public void testSets(){

    Set<Player> players = new HashSet<>();

    players.add(new Player("Nick"));
    players.add(new Player("Paul"));
    players.add(new Player("Scott"));

    PreparedStatement statement = session.prepare("INSERT INTO teams (uid, players) values (?,?);");

    BoundStatement boundStatement = new BoundStatement(statement);

    boundStatement.setString("uid", ...);
    boundStatement.setSet("players", players);

    session.execute(boundStatement);

}

person peterl    schedule 23.04.2015    source источник


Ответы (1)


К сожалению, сегодня вы не можете сделать это с помощью драйвера или его API сопоставления объектов. Существует нерешенная проблема (JAVA-722), открытая сегодня для решения этой и других проблем. связанные с отображением недостатки (связанные проблемы, связанные с этой проблемой), которые будут рассмотрены в следующем выпуске (2.1.6) драйвера.

Возможно, также стоит взглянуть на Achilles, который поддерживает это через свой Трансформатор типов.

person Andy Tolbert    schedule 23.04.2015