복붙노트

[SPRING] 동적 키를 가진 문서를 Spring MongoDb 엔티티 클래스에 매핑하는 방법

SPRING

동적 키를 가진 문서를 Spring MongoDb 엔티티 클래스에 매핑하는 방법

동적 키 이름을 가질 수있는 문서가 있습니다.

{
"_id" : ObjectId("51a29f6413dc992c24e0283e"),
"envinfo" : {
    "appName" : "MyJavaApp",
    "environment" : {
        "cpuCount" : 12,
        "heapMaxBytes" : 5724766208,
        "osVersion" : "6.2",
        "arch" : "amd64",
        "javaVendor" : "Sun Microsystems Inc.",
        "pid" : 44996,
        "javaVersion" : "1.6.0_38",
        "heapInitialBytes" : 402507520,
}

여기서 envinfo의 키는 미리 알려지지 않았습니다. 이 문서를 매핑 할 Spring Data Mongodb에서 엔티티 클래스를 만드는 가장 좋은 방법은 무엇입니까?

해결법

  1. ==============================

    1.이것은 그것을하는 한 방법입니다. 다른 더 좋은 방법이있을 수 있습니다.

    이것은 그것을하는 한 방법입니다. 다른 더 좋은 방법이있을 수 있습니다.

    속성의지도를 만들고 mongo에지도를 저장하십시오.

    public class Env {
    
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private ObjectId id;
        @Field
        private Envinfo envinfo;
    
        public static class Envinfo {
           @Field
           private String appName;
           @Field
           private Map<String, String> attributes;
        }
    }
    

    미리 키를 알고 있다면 Envinfo에 이러한 속성을 추가하고 속성 맵에서 해당 키를 제외시킬 수 있습니다.

  2. ==============================

    2.여기에 내가 할 일이있다.

    여기에 내가 할 일이있다.

    class EnvDocuemnt {
    
        @Id
        private String id; //getter and setter omitted
    
        @Field(value = "envinfo")
        private BasicDBObject infos;
    
        public Map getInfos() {
            // some documents don't have any infos, in this case return null...
            if ( null!= infos)
                return infos.toMap();
            return null;
        }
    
        public void setInfos(Map infos) {
            this.infos = new BasicDBObject( infos );
        }
    
    }
    

    이렇게하면 getInfos ()는 필요한 경우 String 키로 탐색 할 수있는 Map 를 반환하며 중첩 된 Map을 가질 수 있습니다.

    의존성을 위해 BasicDBObject 필드를 직접 노출하지 않는 것이 좋습니다. 따라서 MongoDb 라이브러리를 포함하지 않는 코드에서 인터페이스를 통해 사용할 수 있습니다.

    envinfo에 빈번하게 액세스되는 필드가있는 경우 클래스의 필드로 선언하거나, 직접 접근자가 있으므로지도를 반복해서 탐색하는 데 많은 시간을 소비하지 않는 것이 좋습니다.

  3. from https://stackoverflow.com/questions/17899872/how-to-map-document-with-dynamic-keys-to-a-spring-mongodb-entity-class by cc-by-sa and MIT license