Collections Cassandra自定义集合映射

Collections 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

我正在尝试创建一个自定义编解码器,将Java映射映射到Cassandra
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>{
私有最终TypeCodec>内部编解码器;
私有最终用户类型UserType;
public ShiftCodec(TypeCodec>innerCodec,Class>javaClass){
super(innerCodec.getCqlType(),javaClass);
this.innerCodec=innerCodec;
this.userType=(userType)innerCodec.getCqlType();
}
@凌驾
public ByteBuffer序列化(映射<字符串,日期[]>值,协议版本)
抛出InvalidTypeException{
返回innerCodec.serialize(toCassandraSet(值),protocolVersion);
}
@凌驾
公共地图<字符串,
日期[]>反序列化(ByteBuffer字节,ProtocolVersion ProtocolVersion)
抛出InvalidTypeException{
//TODO自动生成的方法存根
返回JavaMap(innerCodec.deserialize(字节,protocolVersion));
}
@凌驾
公共地图<字符串,
日期[]>parse(字符串值)引发InvalidTypeException{
返回值==null | | value.isEmpty()| | value.equals(null)?null:toJavaMap(innerCodec.parse(value));
}
@凌驾
公共字符串格式(Mapvalue)引发InvalidTypeException{
返回值==null?null:innerCodec.format(toCassandraSet(value));
}
受保护的映射<字符串,
日期[]>toJavaMap(设置shiftSets){
日期[]日期=新日期[6];
MapMap=newhashmap<>();
地图放置(“星期一”,日期);
返回图;
}
受保护的集合toCassandraSet(映射shiftMap){
SetSet=newhashset<>();
UDTAssignedShift=新的UDTAssignedShift();
班次。设置班次名称(“周一”);
班次设置开始日期(“15:30:00:000”);
班次设置结束日期(“19:30:00:000”);
增加(班次);
返回集;
}
}

您能否提供一些有关您面临的问题的信息?我想将Java映射映射到db中的集合。首先,我不知道这是否是正确的编解码器类来做这件事,其次,我不知道如何使用这个编解码器类。