[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.이것은 그것을하는 한 방법입니다. 다른 더 좋은 방법이있을 수 있습니다.
이것은 그것을하는 한 방법입니다. 다른 더 좋은 방법이있을 수 있습니다.
속성의지도를 만들고 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.여기에 내가 할 일이있다.
여기에 내가 할 일이있다.
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에 빈번하게 액세스되는 필드가있는 경우 클래스의 필드로 선언하거나, 직접 접근자가 있으므로지도를 반복해서 탐색하는 데 많은 시간을 소비하지 않는 것이 좋습니다.
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
'SPRING' 카테고리의 다른 글
[SPRING] weblogic의 봄 컨텍스트에서 전역 jta 시간 초과 무시 (0) | 2019.04.25 |
---|---|
[SPRING] JMS 수신기에서의 JMS 메시지 재전송 예외 (0) | 2019.04.25 |
[SPRING] 새 구성을 설정 한 후 모든 스프링 개체를 어떻게 업데이트 할 수 있습니까? (0) | 2019.04.25 |
[SPRING] java.lang.NoSuchMethodError : org.springframework.web.context.ConfigurableWebApplicationContext.setId (Ljava / lang / String;) V (0) | 2019.04.25 |
[SPRING] Spring AOP - catch 블록에서 조언 호출 (0) | 2019.04.25 |