我目前可以使用自定义n1ql查询,但是它是如此简单,我认为我可以使用内置的jpa查询方法,但是我无法弄清楚关键字,因为我没有找回东西。
此代码有效:
@Query("SELECT meta().id as _ID, meta().cas as _CAS, * FROM `my-bucket` mb " +
"WHERE mb.name like $1 OR ANY Parent " +
"IN mb.Parents SATISFIES Parent.name like $1 END")
List<MyObject> searchObjectByName(String name);
但这不起作用
@N1qlPrimaryIndexed
public interface MyObjectRepository extends CouchbasePagingAndSortingRepository<MyObject, String> {
List<MyObject> findBySecondObjectNameContains(String name);
}
@Data
@Document
public class MyObject{
@Id
private String objectId;
@Field
private SecondObject secondObject;
}
@Data
public class SecondObject {
@Field
private String name;
}
我的测试方法:
@Autowired
private MyObjectRepository myObjectRepository;
@Test
public void testFind() {
List<MyObject> myObjects = myObjectRepository.findBySecondObjectNameContains("my name");
Assert.assertNotNull(myObjects);
}
答案 0 :(得分:0)
查询看起来正确,可能缺少一些内容:
1)在测试中,您确定不应该将“我的名字”作为“我的名字%”吗? 2)检查您是否具有覆盖此查询的主索引或辅助索引(通过Web控制台运行同一查询) 3)您何时插入数据?如果您尚未将Couchbase配置为强一致性,那么您可能正在读取旧版本的数据