Py学习  »  MongoDB

按子文档键获取,Spring Hibernate MongoDB应用程序

user3049858 • 4 年前 • 240 次点击  

我得到了以下实体:

@Entity
@Document(collection = "devices")
public class Device {

    @Id
    private Long id;

    @ElementCollection
    @Column(name = "basic_info")
    private Map<String, String> basicInfo;

// getters, setters

以及以下存储库代码:

@Repository
public interface DeviceRepository extends MongoRepository<Device, Long> {

    List<Device> findByBasicInfo_Name(String name);

文档如下:

"id": 1,
"basicInfo": {
    "created": "timestamp",
    "name": "string",
    "type": "string",
    "status": "string"
}

我正在尝试基于 "name" 键入 "basicInfo" findByBasicInfo_Name 功能,我甚至尝试过 findByBasicInfoName 正如有人在另一条线索中暗示的那样,没有任何运气。我得到以下错误:

Caused by: org.springframework.data.mapping.PropertyReferenceException: No property name found for type String! Traversed path: Device.basicInfo.
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/38506
 
240 次点击  
文章 [ 1 ]  |  最新文章 4 年前
Nishant Bhardwaz
Reply   •   1 楼
Nishant Bhardwaz    5 年前

您需要创建自定义存储库并使用 mongoTemplate

@Repository
public interface DeviceRepository extends MongoRepository<Device, String>, DeviceRepositoryCustom {} 

生成自定义repo接口并向findbyMapkey声明一个方法

public interface DeviceRepositoryCustom {

  List<Device> findByMapKey(String mapKey,String value, Class clazz);
}

实现接口。

  public class DeviceRepositoryImpl implements  DeviceRepositoryCustom {

      @Autowired
      private final MongoTemplate mongoTemplate;

      @Override
      public List<Device> findByMapKey(String mapKey,String value, Class clazz) {

      Query query = Query.query(Criteria.where("basicInfo."+mapId).is(value));

       return mongoTemplate.find(query,clazz);
      }
    }