2017-04-19 11 views
0

私はApache Cassandraを初めて使用しています。どのように私はユーザー定義JavaクラスオブジェクトまたはArrayLIstでcassandraのResultsetオブジェクトをキャストできます

私は知りたいどのようにResultsetオブジェクトをユーザー定義リスト型またはjavaのユーザー定義オブジェクトにキャストするかを知りたい

私はまだ多くのことを試みましたが、まだまだ立ち往生しています。

**これは私がこれまで試した方法のコード」である:

public List getOutBoundMessageListFromCassandra(){ 
    List<XchangeOutboundMessage> list=new ArrayList(); 
    try { 

     cluster = Cluster.builder().addContactPoint(contactPoints).build(); 

     session = cluster.connect(keySpaceName); 

     cassandraOps = new CassandraTemplate(session); 

     Select s = QueryBuilder.select().from("XchangeOutboundMessage"); 
     ResultSet result = session.execute(s); 
     list=result.all(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return list; 

}

答えて

1

のは、あなたがテーブルを持っていると仮定してみましょう:

CREATE TABLE xchangeoutboundmessage (
    id timeuuid PRIMARY KEY, 
    message text, 
    sender bigint 
); 

および関連DTO

public class XchangeOutboundMessage { 

    private UUID id; 
    private String message; 
    private long sender; 

    public UUID getId() { 
     return id; 
    } 

    public String getMessage() { 
     return message; 
    } 

    public long getSender() { 
     return sender; 
    } 

    public void setId(UUID id) { 
     this.id = id; 
    } 

    public void setMessage(String message) { 
     this.message = message; 
    } 

    public void setSender(long sender) { 
     this.sender = sender; 
    } 

    @Override 
    public String toString() { 
     return "XchangeOutboundMessage{" + "id=" + id + ", message=" + message + ", sender=" + sender + '}'; 
    } 

} 

行から手動で日付を取得し、値をdtoに設定するか、cassandra-driver-mappingを使用してこれを行うことができます。

for (Row row : result) { 
    XchangeOutboundMessage message = new XchangeOutboundMessage(); 
    message.setId(row.getUUID("id")); 
    message.setMessage(row.getString("message")); 
    message.setSender(row.getLong("sender")); 
    list.add(message); 
} 

をカサンドラドライバのマッピングを使用して::

まずXchangeOutboundMessage DTOに@Table(name = "XchangeOutboundMessage")注釈を追加

MappingManager manager = new MappingManager(session); 
Mapper<XchangeOutboundMessage> mapper = manager.mapper(XchangeOutboundMessage.class); 
list = mapper.map(result).all(); 

注:手動マッピングを使用して

カサンドラ・ドライバ・マッピングは、依存関係として追加する必要があります

Byこれらのタイプのクエリは、非常に非効率的であるため、常にwhere句でパーティションキーを提供しようとします。

+0

これはmaven依存関係バージョン3.2.0と3.1.0を試しましたが、動作していないため、エラーが発生しました。com = 192.以下の行にcom.datastax.driver.core.PagingIterableにアクセスできません。list = mapper.map(result)。すべて(); –

+0

どのバージョンのcassandraドライバを使用していますか? –

+0

私はcassandra-driver-core 2.1.6を使用していますが、cassandra-driver-mapping 3.2.0 versions..thanks a lotを使用しています –

関連する問題