[SPRING] SD MongoDB 다형성 하위 문서
SPRINGSD MongoDB 다형성 하위 문서
방금 spring-data-mongodb로 Java에서 일부 응용 프로그램을 개발하기 시작했고 해결할 수 없었던 몇 가지 문제를 발견했습니다.
다음과 같은 문서 빈을 두 개 만듭니다.
@Document(collection="myBeanBar")
public class BarImpl implements Bar {
String id;
Foo foo;
// More fields and methods ...
}
@Docuemnt
public class FooImpl implements Foo {
String id;
String someField;
// some more fields and methods ...
}
그리고 나는 이와 비슷한 find를 호출하는 메소드를 가진 저장소 클래스를 가지고있다.
public List<? extends Bar> findByFooField(final String fieldValue) {
Query query = Query.query(Criteria.where("foo.someField").is(fieldValue));
return getMongoOperations().find(query, BarImpl.class);
}
bar를 저장하면 Foo와 Bar 모두에 대해 "_class"속성과 함께 mongo에 저장됩니다. 그러나 Foo에서 일부 속성을 발견하면 다음과 같은 예외가 발생합니다.
Exception in thread "main" java.lang.IllegalArgumentException: No property someField found on test.Foo!
at org.springframework.data.mapping.context.AbstractMappingContext.getPersistentPropertyPath(AbstractMappingContext.java:225)
at org.springframework.data.mongodb.core.convert.QueryMapper.getPath(QueryMapper.java:202)
at org.springframework.data.mongodb.core.convert.QueryMapper.getTargetProperty(QueryMapper.java:190)
at org.springframework.data.mongodb.core.convert.QueryMapper.getMappedObject(QueryMapper.java:86)
at org.springframework.data.mongodb.core.MongoTemplate.doFind(MongoTemplate.java:1336)
at org.springframework.data.mongodb.core.MongoTemplate.doFind(MongoTemplate.java:1322)
at org.springframework.data.mongodb.core.MongoTemplate.find(MongoTemplate.java:495)
at org.springframework.data.mongodb.core.MongoTemplate.find(MongoTemplate.java:486)
쿼리의 아무데도 하위 문서 구체화 유형이 지정되어 있기 때문에 일부 파고가 어느 정도 이해가됩니다. Bar의 Entity Information은 foo의 유형이 Foo (FooImpl이 아님)라고 말하면서 차례대로 속성을 가질 수 없다고 말합니다. 그것은 인터페이스이기 때문입니다.
내 질문입니다 : 특정 형식으로 하위 문서 형식을 선언하지 않고이 문제를 해결하거나 해결할 방법이 있습니까?
나는 며칠 동안 그것을 검색하고 문서 및 API와 소스 코드를 살펴 봤지만 명확한 방법으로 찾을 수 없다. 나는 정말로 당신의 도움에 감사드립니다.
고맙습니다.
해결법
-
==============================
1.비슷한 문제가 있었는데 인터페이스를 구현하는 클래스가 있으며 findAll을 사용할 때 오류가 발생합니다.
비슷한 문제가 있었는데 인터페이스를 구현하는 클래스가 있으며 findAll을 사용할 때 오류가 발생합니다.
SpringData 코드를 디버깅 한 후, Mapper가 @TypeAlias를 사용하여 인스턴스화해야하는 유형을 발견 했으므로 test.MetaClasse 구현에 @TypeAlias ( "FullClassName")를 넣었습니다.
나는 당신의 상황을 시험해 보았습니다.
from https://stackoverflow.com/questions/14886999/sd-mongodb-polymorphism-in-subdocument by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 부트 WebClient를 사용하여 페이지 매김 된 API 응답을 수집하는 방법? (0) | 2019.04.13 |
---|---|
[SPRING] JavaFX 및 Spring - Bean은 자동 연결을 지원하지 않습니다. (0) | 2019.04.13 |
[SPRING] messageSource를 사용하여 봄 메시지 코드를 해결할 수 없습니다. (0) | 2019.04.13 |
[SPRING] Spring 애플리케이션 컨텍스트 파일에리스트 정의하기 (0) | 2019.04.13 |
[SPRING] Tomcat에서 JPA, Hibernate 및 Spring을 사용하여 클래스 로더 누출을 피하는 방법 (0) | 2019.04.12 |