, UserTypeResolver cassandra, cassandra, Spring Data Cassandra
:
, Spring MVC ...
UserDefinedTypes Cassandra SET MAP, .
Spring Bean (Spring XML-):
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:cassandra="http://www.springframework.org/schema/data/cassandra"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/data/cassandra http://www.springframework.org/schema/data/cassandra/spring-cassandra.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
...
<context:property-placeholder location="/WEB-INF/spring/cassandra.properties" />
<cassandra:cluster contact-points="${cassandra.contactpoints}"
port="${cassandra.port}" username="cassandra" password="cassandra"
auth-info-provider-ref="authProvider" />
<cassandra:session keyspace-name="${cassandra.keyspace}" />
<cassandra:mapping entity-base-packages="fr.woobe.model">
<cassandra:user-type-resolver keyspace-name="${cassandra.keyspace}" />
</cassandra:mapping>
<cassandra:converter />
<bean id="authProvider" class="com.datastax.driver.core.PlainTextAuthProvider">
<constructor-arg index="0" value="myCassandraUser" />
<constructor-arg index="1" value="somePassword" />
</bean>
<cassandra:template id="cassandraTemplate" />
...
java, MVC Spring:
import org.springframework.data.cassandra.core.CassandraOperations;
...
CassandraOperations cOps = this.beanFactory.getBean("cassandraTemplate", CassandraOperations.class);
List<MyData> rows = cOps.select("SELECT * FROM mydatatable", MyData.class);
Set<Pair> mySetOfPairs = rows.get(i).pairSet;
if (mySetOfPairs!=null)
for (Pair p : mySetOfPairs) {
... handle p.first and p.second ...
...
:
package example.model;
import java.util.Set;
import org.springframework.data.cassandra.core.mapping.CassandraType;
import org.springframework.data.cassandra.core.mapping.PrimaryKey;
import org.springframework.data.cassandra.core.mapping.Table;
import com.datastax.driver.core.DataType.Name;
@Table public class MyData {
@PrimaryKey
public String myKey;
public String moreStuff;
@CassandraType(type = Name.SET, userTypeName = "pairType")
public Set<Pair> pairSet;
}
, :
package example.model;
import org.springframework.data.cassandra.core.mapping.UserDefinedType;
@UserDefinedType("pairType")
public class Pair {
public String first;
public String second;
public Pair() {
}
public Pair(String f, String s) {
this.first= f;
this.second= s;
}
}
Cassandra, :
CREATE TYPE pairType (first text, second text);
CREATE TABLE MyData (
myKey text,
moreStuff text,
pairSet set<frozen<pairType>>,
PRIMARY KEY (myKey)
) ;
INSERT INTO MyData (myKey, moreStuff, pairSet)
VALUES ('hello', 'world', {
{ first:'one', second:'two' },
{ first:'out', second:'there' } }
) ;
Maven, spring -webmvc , Web MVC Spring, spring -context-support spring -data-cassandra. dataStax cassandra .