Esto es más o menos una cuestión de cómo diseñar sus colecciones. Como Mongo no sabe nada sobre los tipos, debemos agregar los metadatos adicionales para poder distinguir los documentos entre sí. Por lo tanto, al realizar consultas, deberá agregar estas restricciones a la consulta también. Tenga en cuenta que puede consultar la clave _class
a través del DefaultMongoTypeMapper.DEFAULT_TYPE_KEY
.
Hemos pensado en añadir un poco de API para la consulta de expresar sólo se quiere obtener documentos de un tipo determinado de esta manera:
mongo.find(new Query(Teacher.class), Teacher.class);
todavía se siente un poco raro que usted tiene a la clase de dominio estado dos veces (lo cual tiene sentido si quiere restringir los resultados a documentos de un tipo dado pero asignarlos a una clase diferente). Más allá de eso, solo podíamos restringir los resultados a documentos que llevan exactamente ese tipo ya que los tipos se almacenan como cadenas y la herencia solo se puede aplicar si la clase ya se ha cargado. Por lo tanto, al consultar documentos con el tipo Person
, primero debemos cargar todos los documentos, intentar buscar el tipo, hacer la verificación de tipo y posiblemente descartar el resultado que es subóptimo por razones de rendimiento.
Otra opción sería almacenar todos los tipos a los que se puede asignar una clase (prácticamente todas las interfaces y superclases excepto Object
) pero eso causaría una gran cantidad de datos almacenados. Esto podría ser abordado agregando una bandera a la anotación @Document
.
Conclusión: actualmente, no hay otra manera, pero siéntanse libres de aumentar las entradas de Jira si tiene alguna sugerencia de cómo se puede mejorar.
Gracias Oliver, levantaré un billete si se me ocurre una buena solución. – ltfishie
Pasando por el mongodb Jira, me encontré con este ticket https://jira.springsource.org/browse/DATAMONGO-128 que es un mercado tan fijo como el de 1.0.M3. ¿Esto todavía está en la fuente? – ltfishie
Sí, pero esto no está tocando su escenario. El boleto cubre la posibilidad de almacenar 'Persona' y' Profesor' dentro de la misma colección y poder consultar objetos desde él y obtener 'Person' y 'Teacher' instanciados (de ahí la información de tipo necesaria). En realidad, no considera mejorar el escenario "solo leer' Objetos del profesor ". –