Ну, есть решение, но оно тебе не понравится. По сути, вы можете указать соответствующий класс для внутреннего пути в вашем объекте. Вот что я сделал, и это работает:
public class Release extends ReflectionDBObject {
//other fields omitted
private List<ReleaseDetailsByTerritory> releaseDetailsByTerritory = new ArrayList<ReleaseDetailsByTerritory>();
}
public class ReleaseDetailsByTerritory extends ReflectionDBObject { //...}
Теперь, если я просто сделаю это:
releaseColl.setObjectClass(Release.class);
releaseColl.setInternalClass("ReleaseDetailsByTerritory.0", ReleaseDetailsByTerritory.class);
Release r = (Release) releaseColl.findOne();
//the internal list will contain ReleaseDetailsByTerritory type objects (not DBObjects)
System.out.println(r.getReleaseDetailsByTerritory().get(0).getClass().getName());
Дрянная вещь в том, что вы не можете (или, по крайней мере, я не нашел как) указать класс отображения для ВСЕХ элементов встроенного массива. Вы НЕ МОЖЕТЕ сделать что-то вроде:
releaseColl.setInternalClass("ReleaseDetailsByTerritory", ReleaseDetailsByTerritory.class);
или
releaseColl.setInternalClass("ReleaseDetailsByTerritory.*", ReleaseDetailsByTerritory.class);
Вместо этого вы должны указать класс отображения любого возможного элемента встроенного массива:
releaseColl.setInternalClass("ReleaseDetailsByTerritory.0", ReleaseDetailsByTerritory.class);
releaseColl.setInternalClass("ReleaseDetailsByTerritory.1", ReleaseDetailsByTerritory.class);
releaseColl.setInternalClass("ReleaseDetailsByTerritory.2", ReleaseDetailsByTerritory.class);