使用 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。
有没有办法在我们通过 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。