Collections Cassandra自定义集合映射
我正在尝试创建一个自定义编解码器,将Java映射映射到CassandraCollections Cassandra自定义集合映射,collections,cassandra,datastax,codec,Collections,Cassandra,Datastax,Codec,我正在尝试创建一个自定义编解码器,将Java映射映射到CassandraSetUDTShift是用户定义的类型。下面是我根据说明测试的自定义编解码器类: 我有UDTShift,在cassandra数据库中称为“udt+shift”,在Java中还有ORM pojo类UDTShift类 我在codecRegistry中注册此编解码器时遇到问题,我不确定这是否是创建编解码器的正确方法 package com.sick.il.analytics.system.configuration.cassand
Set
UDTShift
是用户定义的类型。下面是我根据说明测试的自定义编解码器类:
我有UDTShift
,在cassandra数据库中称为“udt+shift”,在Java中还有ORM pojo类UDTShift
类
我在codecRegistry中注册此编解码器时遇到问题,我不确定这是否是创建编解码器的正确方法
package com.sick.il.analytics.system.configuration.cassandracodec;
import java.nio.ByteBuffer;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import com.datastax.driver.core.ProtocolVersion;
import com.datastax.driver.core.TypeCodec;
import com.datastax.driver.core.UserType;
import com.datastax.driver.core.exceptions.InvalidTypeException;
import com.sick.il.analytics.system.configuration.model.UDTAssignedShift;
public class ShiftCodec extends TypeCodec < Map < String, Date[] >> {
private final TypeCodec < Set < UDTAssignedShift >> innerCodec;
private final UserType userType;
public ShiftCodec(TypeCodec < Set < UDTAssignedShift >> innerCodec, Class < Map < String, Date[] >> javaClass) {
super(innerCodec.getCqlType(), javaClass);
this.innerCodec = innerCodec;
this.userType = (UserType) innerCodec.getCqlType();
}
@Override
public ByteBuffer serialize(Map < String, Date[] > value, ProtocolVersion protocolVersion)
throws InvalidTypeException {
return innerCodec.serialize(toCassandraSet(value), protocolVersion);
}
@Override
public Map < String,
Date[] > deserialize(ByteBuffer bytes, ProtocolVersion protocolVersion)
throws InvalidTypeException {
// TODO Auto-generated method stub
return toJavaMap(innerCodec.deserialize(bytes, protocolVersion));
}
@Override
public Map < String,
Date[] > parse(String value) throws InvalidTypeException {
return value == null || value.isEmpty() || value.equals(null) ? null : toJavaMap(innerCodec.parse(value));
}
@Override
public String format(Map < String, Date[] > value) throws InvalidTypeException {
return value == null ? null : innerCodec.format(toCassandraSet(value));
}
protected Map < String,
Date[] > toJavaMap(Set < UDTAssignedShift > shiftSets) {
Date[] dates = new Date[6];
Map < String, Date[] > map = new HashMap < > ();
map.put("Monday", dates);
return map;
}
protected Set < UDTAssignedShift > toCassandraSet(Map < String, Date[] > shiftMap) {
Set < UDTAssignedShift > sets = new HashSet < > ();
UDTAssignedShift shift = new UDTAssignedShift();
shift.setShiftName("Monday_01");
shift.setStartDate("15:30:00:000");
shift.setEndDate("19:30:00:000");
sets.add(shift);
return sets;
}
}
package com.sick.il.analytics.system.configuration.cassandracodec;
导入java.nio.ByteBuffer;
导入java.util.Date;
导入java.util.HashMap;
导入java.util.HashSet;
导入java.util.Map;
导入java.util.Set;
导入com.datastax.driver.core.ProtocolVersion;
导入com.datastax.driver.core.TypeCodec;
导入com.datastax.driver.core.UserType;
导入com.datastax.driver.core.exceptions.InvalidTypeException;
导入com.sick.il.analytics.system.configuration.model.UDTAssignedShift;
公共类ShiftCodec扩展了TypeCodec
您能否提供一些有关您面临的问题的信息?我想将Java映射映射到db中的集合。首先,我不知道这是否是正确的编解码器类来做这件事,其次,我不知道如何使用这个编解码器类。