Mongo ReflectionDBObject, отображать ВСЕ элементы встроенного массива в класс; - PullRequest
3 голосов
/ 13 января 2012

Я использую Mongo с собственным драйвером Java (без сторонней библиотеки / ORM). У меня есть это:

public class Release extends ReflectionDBObject {

    //other fields omitted    

    private List<ReleaseDetailsByTerritory> releaseDetailsByTerritory = new ArrayList<ReleaseDetailsByTerritory>();

}

public class ReleaseDetailsByTerritory extends ReflectionDBObject { //...}

Если я хочу получить запись «Release», имеющую две записи «ReleaseDetailsByTerritory», и автоматически создать их в экземпляре класса Release, содержащем список из двух экземпляров класса ReleaseDetailsByTerritory, я должен сделать это:

releaseColl.setObjectClass(Release.class);
releaseColl.setInternalClass("ReleaseDetailsByTerritory.0", ReleaseDetailsByTerritory.class);
releaseColl.setInternalClass("ReleaseDetailsByTerritory.1", ReleaseDetailsByTerritory.class);
Release r = (Release) releaseColl.findOne();

т.е. Мне нужно специально сопоставить каждый потенциальный элемент встроенного массива с соответствующим классом.

Есть ли способ сообщить драйверу Mongo, что я хочу, чтобы все и любой элемент встроенного массива были сопоставлены определенному классу? Что-то вроде:

collection.setInternalClass("ReleaseDetailsByTerritory.*", ReleaseDetailsByTerritory.class);

Спасибо. И, пожалуйста, не говорите «используйте модуль Spring MondoDb или Morphia». Я хочу знать, достижимо ли это с помощью встроенного в Java драйвера Java.

1 Ответ

2 голосов
/ 13 января 2012

Глядя на исходный код, я не думаю, что это возможно. Также нет очевидного способа создать удобную функциональность для того, что вам нужно. Необходимость вызывать setInternalClass для каждого элемента массива вряд ли возможна, учитывая огромное количество используемой памяти, которое может привести к большим массивам.

Возможно, вы захотите реализовать собственную реализацию класса «Document», который делает то, что вам нужно, не прибегая к полному картографическому решению, такому как Morphia (которое на самом деле довольно элегантно, в большей степени, чем Spring).

Вы также можете открыть вопрос JIRA на jira.mongodb.org и запросить эту функцию.

...