使用 DataStax 的 Java 驱动程序在集合类型中使用自定义 类

Using Custom Classes in Collection Types using DataStax's Java Driver

有没有办法在我们通过 BoundStatement.setSet(..) 方法提供给 DataStax Java 驱动程序的集合类型中使用我们的类型(类 我们提供)而不使用用户定义类型?也许使用对象映射 API?

如果是这样,当我们创建 table 时,我们应该为 SET 中的 type 使用什么(换句话说:SET<????>)?

我们正在使用连接到 DSE v4.6.0 (Cassandra 2.0.11.83) 的 DataStax Java Driver v2.1.5。

举个例子来说明:

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);

}

遗憾的是,您目前还不能使用驱动程序或其对象映射 API 执行此操作。今天打开了一个未解决的问题 (JAVA-722) 来处理这个问题和其他映射相关的不足之处(相关问题链接在那个问题中),将在驱动程序的下一个版本 (2.1.6) 中解决。

也许还值得一看 Achilles which supports this through its Type Transformer