TTL support in spring boot application using spring -data-cassandra

I am trying to add TTL to each column when inserting and updating data using spring boot applicaiton. For this I use spring -data-cassandra 1.1.3.RELEASE

To do this, I wrote one CustomTTLRepository interface:

@NoRepositoryBean

public interface CustomTTLRepository<T, ID extends Serializable> extends TypedIdCassandraRepository<T, ID> {

    <S extends T> S save(S s, int ttl);

}

CustomTTLRepositoryImpl implementation:

@NoRepositoryBean

public class CustomTTLRepositoryImpl<T, ID extends Serializable> extends SimpleCassandraRepository<T, ID> implements CustomTTLRepository<T, ID> {

    public CustomTTLRepositoryImpl(CassandraEntityInformation<T, ID> metadata, CassandraTemplate template) {
         super(metadata, template);
         this.entityInformation = metadata;
         this.template = template;
    }   

    @Override
    public <S extends T> S save(S s, int ttl) {
        WriteOptions writeOptions=new WriteOptions();
        writeOptions.setTtl(ttl);
        return template.insert(s, writeOptions);
    }

}

But when I try to deploy this application, I get the following error:

Caused by: java.lang.IllegalArgumentException: encountered unsupported query parameter type [class java.lang.Object] in method public abstract java.lang.Object com.cisco.operation.CustomTTLRepository.save(java.lang.Object,int)
    at org.springframework.data.cassandra.repository.query.CassandraQueryMethod.verify(CassandraQueryMethod.java:104)
    at org.springframework.data.cassandra.repository.query.CassandraQueryMethod.<init>(CassandraQueryMethod.java:68)
    at org.springframework.data.cassandra.repository.support.CassandraRepositoryFactory$CassandraQueryLookupStrategy.resolveQuery(CassandraRepositoryFactory.java:106)
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.<init>(RepositoryFactorySupport.java:369)
    at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:192)
    at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.initAndReturn(RepositoryFactoryBeanSupport.java:239)
    at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:225)
+4
source share
1 answer


Even if it is too late, maybe it will be useful for others, I tried with CassandraOperations, which works fine, please check below repository implementation

 @Repository
 public class DomainRepository {

 @Autowired
 CassandraOperations cassandraOperations;

 @Autowired
 WriteOptions writeOptions;

 @Override
 public void save(DomainObject domainObject) {
    writeOptions.setTtl(100);
    cassandraOperations.insert(domainObject,writeOptions);
 }
}

thanks

0
source

Source: https://habr.com/ru/post/1622047/


All Articles