Java 我是否可以仅基于分区键使用Crudepository删除整个cassandra分区?

Java 我是否可以仅基于分区键使用Crudepository删除整个cassandra分区?,java,spring,cassandra,crud,default-constructor,Java,Spring,Cassandra,Crud,Default Constructor,基本上我有这个表: CREATE TABLE experiment( experimentid varchar, description text, rt float, intensity float, mz float, identifier text, chemical_formula text, filename text, PRIMARY KEY ((experimentid),description, rt, intensity, mz, identifier, ch

基本上我有这个表:

CREATE TABLE experiment(
 experimentid varchar,
 description text,
 rt float,
 intensity float,
 mz float,
 identifier text,
 chemical_formula text,
 filename text,
 PRIMARY KEY ((experimentid),description, rt, intensity, mz, identifier, chemical_formula, filename)
);
使用experience.java

@Table(name= "experiment")
public class Experiment implements Serializable{

@PrimaryKey
private ExperimentKey experimentKey;

public ExperimentKey getExperimentKey() {
    return experimentKey;
}
public void setExperimentKey(ExperimentKey experimentKey) {
    this.experimentKey = experimentKey;
}
}
和ExperimentKey.java

@PrimaryKeyClass
public class ExperimentKey implements Serializable {

@PrimaryKeyColumn(name = "experimentid",ordinal = 0,type = PrimaryKeyType.PARTITIONED)
@CassandraType(type=DataType.Name.VARCHAR)
private String experimentid;
@PrimaryKeyColumn(name = "description",ordinal = 1)
@CassandraType(type=DataType.Name.VARCHAR)
private String description;
@PrimaryKeyColumn(name = "rt",ordinal = 2)
@CassandraType(type=DataType.Name.FLOAT)
private Float rt;
@PrimaryKeyColumn(name = "intensity",ordinal = 3)
@CassandraType(type=DataType.Name.FLOAT)
private Float intensity;
@PrimaryKeyColumn(name = "mz",ordinal = 4)
@CassandraType(type=DataType.Name.FLOAT)
private Float mz;
@PrimaryKeyColumn(name = "identifier",ordinal = 5)
@CassandraType(type=DataType.Name.VARCHAR)
private String identifier;
@PrimaryKeyColumn(name = "chemical_formula",ordinal = 6)
@CassandraType(type=DataType.Name.VARCHAR)
private String chemical_formula;
@PrimaryKeyColumn(name = "filename",ordinal = 7)
@CassandraType(type=DataType.Name.VARCHAR)
private String filename;

//getters and setters

public ExperimentKey(){

}
}
基本上,我想通过Crudepository实现以下查询:

Delete * from experiment where experimentid='(something)';
我知道我只能使用findAllByExperimentKey\u Experimentid(Experimentid)根据分区键进行选择,但是否可以使用delete执行相同的操作? 我尝试了deleteAllByExperimentKey\u Experimentid(Experimentid),但出现错误:

无法使用带参数的构造函数NO_构造函数实例化void

编辑1

好的,这是我的ExperimentRepo.java

public interface ExperimentRepo extends CrudRepository<Experiment,ExperimentKey>{
     public void deleteAllByByExperimentKey_Experimentid(String expid);
}

不确定应在何处使用MapId id=id(“实验id”,

你试过用实验键移除吗?非常感谢你的回答!!!您的意思是我应该更改存储库而不使用CRUDEPository吗?因为Crud中不存在此方法,所以我得到了相同的错误!我可以使用deleteByExperimentKey,但这基本上会遍历每一行并删除它,这需要很长时间。如果我有几百万排呢?!因此,在一天结束时,如何通过只提供分区键从Cassandra中删除整个分区呢;正在使用deleteById api。。。如果这不起作用,你可以一直用老式的方法。您可以编写自己的CQL语句。String cql=“从实验中删除,其中实验ID='123123';cassandraOperations.execute(cql);我做了上面的编辑,但仍然得到相同的错误!我应该在别的地方多加些什么吗?请帮帮我!我是个新手!有没有办法通过Crudepository做到这一点??我真的很想举个例子!
@Service
public class ExperimentServiceImpl implements ExperimentService{

private ExperimentRepo experimentRepo;

@Autowired
public ExperimentServiceImpl(ExperimentRepo experimentRepo){
    this.experimentRepo=experimentRepo;
}
@Override
public void deleteAllExperimentByExperimentid(String expid){
    MapId id = id("experimentid", expid);
    experimentRepo.deleteAllByByExperimentKey_Experimentid(expid);
}