Spring 数据 Mongodb 错误地转换文档
Spring Data Mongodb Convert Document Falsely
我的文档结构具有一些通用性 class。写入 mongodb 一切正常。但是当从 mongodb spring 数据中读取文档时,数据错误地将文档转换为对象。它将子文档转换为另一种类型。两种类型(实际的子集合类型和错误转换的类型)都继承自相同的抽象 class。
模型类:(getter setter 由 lombok 生成)
@Data
public abstract class CandidateInfo {
private String _id;
}
@Data
public class CandidateInfoContainer<E extends CandidateInfo> {
private String _id;
private int commentCount = 0;
@Valid
private List<E> values = new ArrayList<>();
}
@Data
public class Responsibility extends CandidateInfo {
@NotNull
private String responsibilityId;
@ReadOnlyProperty
private String responsibilityText;
}
@Data
public class Experience extends CandidateInfo {
@Valid
private CandidateInfoContainer<Responsibility> responsibilities;
}
@Document
@JsonInclude(JsonInclude.Include.NON_NULL)
@Data
public class Candidate {
private String _id;
@Valid
private CandidateInfoContainer<Experience> experiences;
}
并且如果您创建如下所示的 mongo 存储库:
@Repository
public interface CandidateRepository extends MongoRepository<Candidate,String>{
}
并像这样使用它:
@Autowired
private CandidateRepository candidateRepository;
Candidate candidate = candidateRepository.findOne("documentId");
然后 spring 数据 mongo 映射转换器创建 candidates.experiences.responsibilities.values 列表作为 Experince 列表但是它应该是责任列表。
您可以在 this link 中找到演示项目以及有关该问题的更多信息。任何人都可以指出什么是错误的吗?否则我必须编写自己的转换器(演示有一个)
有什么不明白的可以追问。
谢谢。
我在 spring-data-mongo here 中打开了一个问题。显然我发现了一个错误!谢谢大家
我的文档结构具有一些通用性 class。写入 mongodb 一切正常。但是当从 mongodb spring 数据中读取文档时,数据错误地将文档转换为对象。它将子文档转换为另一种类型。两种类型(实际的子集合类型和错误转换的类型)都继承自相同的抽象 class。
模型类:(getter setter 由 lombok 生成)
@Data
public abstract class CandidateInfo {
private String _id;
}
@Data
public class CandidateInfoContainer<E extends CandidateInfo> {
private String _id;
private int commentCount = 0;
@Valid
private List<E> values = new ArrayList<>();
}
@Data
public class Responsibility extends CandidateInfo {
@NotNull
private String responsibilityId;
@ReadOnlyProperty
private String responsibilityText;
}
@Data
public class Experience extends CandidateInfo {
@Valid
private CandidateInfoContainer<Responsibility> responsibilities;
}
@Document
@JsonInclude(JsonInclude.Include.NON_NULL)
@Data
public class Candidate {
private String _id;
@Valid
private CandidateInfoContainer<Experience> experiences;
}
并且如果您创建如下所示的 mongo 存储库:
@Repository
public interface CandidateRepository extends MongoRepository<Candidate,String>{
}
并像这样使用它:
@Autowired
private CandidateRepository candidateRepository;
Candidate candidate = candidateRepository.findOne("documentId");
然后 spring 数据 mongo 映射转换器创建 candidates.experiences.responsibilities.values 列表作为 Experince 列表但是它应该是责任列表。
您可以在 this link 中找到演示项目以及有关该问题的更多信息。任何人都可以指出什么是错误的吗?否则我必须编写自己的转换器(演示有一个)
有什么不明白的可以追问。
谢谢。
我在 spring-data-mongo here 中打开了一个问题。显然我发现了一个错误!谢谢大家