Java Spring,使用 MongoTemplate 和泛型类型查找

标签 java spring criteria spring-data-mongodb generic-programming

我正在尝试构建一个返回通用对象列表的查询。

这是我的基础对象:

@Getter
@Setter
@EqualsAndHashCode(of = {"id"})
public class Normalized {

  public static final String J_ID = "id";
  public static final String J_CREATED_AT = "createdAt";
  public static final String J_UPDATED_AT = "udpatedAt";

  @Id
  @Indexed
  @JsonProperty(J_ID)
  private String id;
  @JsonProperty(J_CREATED_AT)
  private Instant createdAt;
  @JsonProperty(J_UPDATED_AT)
  private Instant updatedAt;

}

这是我的域对象:

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
@Document    
public class NormalizedContent<E extends OriginalContent> extends Normalized {

  public static final String J_SOURCE = "source";
  public static final String J_EXTERNAL_URL = "externalUrl";
  public static final String J_MAIN_TEXT = "mainText";
  public static final String J_ORIGINAL_CONTENT = "originalContent";
  public static final String J_CREATED_DATE = "createdDate";

  @Indexed
  @JsonProperty(J_SOURCE)
  private Sources source;

  @Indexed
  @JsonProperty(J_CREATED_DATE)
  private Instant createdDate;

  @JsonProperty(J_EXTERNAL_URL)
  private String externalUrl;

  @JsonProperty(J_MAIN_TEXT)
  private String mainText;

  @JsonProperty(J_ORIGINAL_CONTENT)
  private E originalContent;
}

这是我的功能的简化:

public Page<NormalizedContent<? extends OriginalContent>> findAllByQueriesAndFilters(
      List<String> queriesId, Pageable pageable) {
    if (queriesId == null || queriesId.isEmpty()) {
      throw new IllegalArgumentException("Queries unspecified");
    }
    Criteria criteria = Criteria.where(NormalizedContent.J_QUERY).in(queriesId);
    Query query = new Query(criteria);
    query.with(pageable);
    List<NormalizedContent<? extends OriginalContent>> content =
        mongoTemplate.find(query, NormalizedContent.class);

    Long total = mongoTemplate.count(query, OTBUserpanelUser.class);

    return new PageImpl<NormalizedContent<? extends OriginalContent>>(content, pageable, total);
  }

问题在于:

List<NormalizedContent<? extends OriginalContent>> content =
            mongoTemplate.find(query, NormalizedContent.class);

因为内容变量是NormalizedContent<? extends OriginalContent>的列表find 方法返回 NormalizedContent 的列表.

我该怎么做才能让 find 方法返回 NormalizedContent<? extends OriginalContent> 的列表?

最佳答案

List<NormalizedContent>   content =
    mongoTemplate.find(query, NormalizedContent.class);

从内容中退休标准化内容时,转换为包含 <? extends OriginalContent> 的属性类型。

关于Java Spring,使用 MongoTemplate 和泛型类型查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45051014/

相关文章:

java.io.FileNotFoundException : http://localhost:8080/manager/text/list

java - IncorrectResultSizeDataAccessException - 尝试简单地获取最新的行

java - UNION 到 JPA 查询

java - 通过添加camel功能扩展现有的spring应用程序

java - 使用水槽反序列化Json文件并下沉到HDFS

java - 在学习 Spring 框架时遇到 java.lang.NoClassDefFoundError

java - 与hibernate分组的其他字段一起计数

java - 在没有集合的情况下使用泛型

java - Java中有参数树的实现吗?

hibernate - 标准与预测相结合