【问题标题】:Using Custom Classes in Collection Types using DataStax's Java Driver使用 DataStax 的 Java 驱动程序在集合类型中使用自定义类
【发布时间】:2015-07-01 02:19:24
【问题描述】:

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

如果是这样,当我们创建表时,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);

}

【问题讨论】:

    标签: cassandra datastax datastax-enterprise datastax-java-driver


    【解决方案1】:

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

    还值得一看 Achilles,它通过其 Type Transformer 支持这一点。

    【讨论】:

      猜你喜欢
      • 2016-07-06
      • 1970-01-01
      • 1970-01-01
      • 2013-12-19
      • 2020-12-26
      • 2016-05-30
      • 2014-09-19
      • 2023-04-05
      • 2013-10-19
      相关资源
      最近更新 更多