我正在用Cassandra创建一个Spring数据存储库。我必须使用@Query
来使用CQL来获得一些自定义结果,而不是findBy
方法。
我遇到一个例外,那就是未配置表名,在调用Cassandra时,似乎@Query
使用的是实际名称而不是实体名称。
这就是我的设置
@Table("book")
public class BookEntity {
...
}
import java.util.List;
import org.baeldung.spring.data.cassandra.model.BookEntity;
import org.springframework.data.cassandra.repository.CassandraRepository;
import org.springframework.data.cassandra.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
@Repository
public interface BookRepository extends CassandraRepository<BookEntity> {
@Query("select b.isbn from BookEntity where and publisher=:publisher", allowFiltering = true)
List<String> findIdsWithPublisher(@Param("publisher") String publisher);
}
当我调用方法findIdsWithPublisher()
时,我得到一个未配置bookentity
的异常。另一个没有使用实体名称或实体属性名称的指示是,当我在查询中使用别名,例如from BookEntity b where b.publisher = ...
或任何实体名称与其本机名称不同的列名称(例如updatedDate (native updt_date)
)时,抛出诸如no viable alternative found for
之类的异常。
@Query
仅接受本机查询还是我做错了什么?
任何提示都值得赞赏。