Saltar al contenido

¿Cómo encontrar colecciones por el objectId de su objeto anidado en Spring Data usando la interfaz de repositorio?

Solución:

He descubierto cómo solucionar esto.

Cambie el tipo de parámetro a org.bson.types.ObjectId; de String

public List<SomeObject> findByNestedObjectId(ObjectId id);

y cuando lo llames usa

 repositoryName.findByNestedObjectId(new ObjectId(theIdString));

Spring-data-mongodb no convertiría _identificación campo a ObjectId escriba automáticamente en la clase anidada en la operación de consulta. Debería convertirlo manualmente. Por ejemplo:

public List<SomeObject> findByNestedObjectId(String id) {
    Query query = Query.query(new Criteria("nestedObject._id", convertToObjectId(id)));
    return mongoTemplate.find(query, SomeObject.class);
}

Object convertToObjectId(Object id) {
    if (id instanceof String && ObjectId.isValid(id)) {
        return new ObjectId(id);
    }
    return id;
}

Si NestedObject Se ve como esto:

class NestedObject {

  @Id String id;
}

y el String el valor que ingresa en la consulta es válido ObjectId la consulta:

findByNestdObjectId(String id);

Deberia trabajar. Si no se siente libre de crear un ticket en JIRA y proporcionar un pequeño caso de prueba para reproducirlo.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *