Spring data Cassandra, Allow filtering

Viewed 2444

I have the following table

CREATE TABLE magazines.magazine_name (
    frequency smallint,
    magazine_id varchar,
    magazine_name varchar,
    PRIMARY KEY (magazine_id,magazine_name)
);

Should I use allow filter annotation to have the following repository method get executed

@Query("SELECT * from magazine_name where magazine_id = ?0")
MagazineName findMagazineCQlQuery(String id);

because I get the folowing execption :

org.springframework.data.cassandra.CassandraInvalidQueryException:Query; 
CQL[com.datastax.oss.driver.internal.core.cql.DefaultSimpleStatement@c78c2039]; 
Cannot execute this query as it might involve data filtering and thus may have unpredictable performance. 
If you want to execute this query despite the performance unpredictability, use ALLOW FILTERING; 

nested exception is 
 com.datastax.oss.driver.api.core.servererrors.InvalidQueryException:
Cannot execute this query as it might involve data filtering 
and thus may have unpredictable performance. 
If you want to execute this query despite the performance unpredictability, use ALLOW FILTERING

By the way, I know that I can use query methods or even findById method, but actually I am just experimenting with cql quires and try to learn about it.

--update The domain object

@Table(value = "magazine_name")
@Data
@Builder
public class MagazineName {

    @PrimaryKeyColumn(name = "magazine_id", ordinal = 0, type = PrimaryKeyType.PARTITIONED)
    private String magazineId;
    @PrimaryKeyColumn(name = "magazine_name", ordinal = 1, type = PrimaryKeyType.CLUSTERED)
    private String name;
}
1 Answers

I defined the table exactly like yours and here is my repository. I can query without error.

1. My Repository

public interface IMagazineDao extends CrudRepository<Magazine, String> {

    @Query("SELECT * from magazine_name where magazine_id = ?0")
    Magazine findMagazineCQlQuery(String id);


}

2. Application

@SpringBootApplication
public class Application implements CommandLineRunner {
    
    @Autowired
    private IMagazineDao magazineDao;

    @Override
    public void run(String... args) throws Exception {
        this.magazineDao.save(new Magazine("magazine1", "name", (short) 1));
        this.magazineDao.findMagazineCQlQuery("magazine1");
    }

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

3. Magazine class

@Table(value = "magazine_name")
public class Magazine {

    @PrimaryKeyColumn(name = "magazine_id", ordinal = 0, type = PrimaryKeyType.PARTITIONED)
    private String magazineId;

    @PrimaryKeyColumn(name = "magazine_name", ordinal = 1, type = PrimaryKeyType.CLUSTERED)
    private String name;

    @Column
    private Short frequency;

    public Magazine() {

    }
    public Magazine(String magazineId, String name, Short frequency) {
        this.magazineId = magazineId;
        this.name = name;
        this.frequency = frequency;
    }

    public String getMagazineId() {
        return magazineId;
    }

    public void setMagazineId(String magazineId) {
        this.magazineId = magazineId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Short getFrequency() {
        return frequency;
    }

    public void setFrequency(Short frequency) {
        this.frequency = frequency;
    }
}
Related