如何在 spring 数据 MongoRepository 中构建搜索端点
How to build a search endpoint in spring data MongoRepository
我正在尝试使用 spring 数据 MongoRepository 访问 mongodb 数据层。所以在这里我可以使用存储库端点执行基本的 CRUD 操作,但无法执行自定义搜索。
型号class:
@Document(collection = "merchant")
public class Merchant {
@Id
private String id;
private Long zohoAccountRefId;
private String businessId;
private String businessName;
private String businessAddress;
private String businessPhone;
private String description;
private String businessEmail;
private String accountType;
private BusinessOwner businessOwner;
private List<Product> products;
private List<Plugin> plugins;
private List<Service> services;
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
private Date dateCreated;
//getters and setters
}
存储库:
@RepositoryRestResource(collectionResourceRel = "account",path = "account")
public interface MerchantRepository extends MongoRepository<Merchant,String> {
@RestResource(path = "businessName",rel = "businessName")
List<Merchant> findByName(@Param("businessName") String businessName);
}
当我尝试使用此代码时出现以下错误:
Caused by: org.springframework.data.mapping.PropertyReferenceException: No property name found for type Merchant!
这是实现它的正确方法吗?或者我得到的这个问题的解决方案是什么?
方法的名称很重要,它告诉 Spring 数据 MongoDB 如何构建查询。您已将方法命名为 findByName
,因此 Spring 数据 MongoDB 正在尝试针对名为 name
的 属性 创建查询,但您没有任何属性 在您的商家 collection 中简单地命名为 name
。
要针对 Merchant.businessName
进行查询,您的方法应该是:
List<Merchant> findByBusinessName(@Param("businessName") String businessName);
我正在尝试使用 spring 数据 MongoRepository 访问 mongodb 数据层。所以在这里我可以使用存储库端点执行基本的 CRUD 操作,但无法执行自定义搜索。
型号class:
@Document(collection = "merchant")
public class Merchant {
@Id
private String id;
private Long zohoAccountRefId;
private String businessId;
private String businessName;
private String businessAddress;
private String businessPhone;
private String description;
private String businessEmail;
private String accountType;
private BusinessOwner businessOwner;
private List<Product> products;
private List<Plugin> plugins;
private List<Service> services;
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
private Date dateCreated;
//getters and setters
}
存储库:
@RepositoryRestResource(collectionResourceRel = "account",path = "account")
public interface MerchantRepository extends MongoRepository<Merchant,String> {
@RestResource(path = "businessName",rel = "businessName")
List<Merchant> findByName(@Param("businessName") String businessName);
}
当我尝试使用此代码时出现以下错误:
Caused by: org.springframework.data.mapping.PropertyReferenceException: No property name found for type Merchant!
这是实现它的正确方法吗?或者我得到的这个问题的解决方案是什么?
方法的名称很重要,它告诉 Spring 数据 MongoDB 如何构建查询。您已将方法命名为 findByName
,因此 Spring 数据 MongoDB 正在尝试针对名为 name
的 属性 创建查询,但您没有任何属性 在您的商家 collection 中简单地命名为 name
。
要针对 Merchant.businessName
进行查询,您的方法应该是:
List<Merchant> findByBusinessName(@Param("businessName") String businessName);