2015-06-28 9 views
0

У меня есть коллекция Монго, которая имеет встроенный массив ObjectId, поэтому общий формат таков:Spring MongoDB - объекты массива прийти нуль

{ 
    "_id" : ObjectId("123abc..."), 
    "Active" : [ 
     { 
      "Id" : ObjectId("123abc...") 
     }, 
     { 
      "Id" : ObjectId("123abc...") 
     }, 
     ..., 
     { 
      "Id" : ObjectId("123abc...") 
     } 
    ], 
    "field1" : "blah blah", 
    "field2" : "blah blah", 
    "field3" : "blah blah", 
    "field4" : "blah blah" 
    "field5" : ObjectId("123abc...") 
} 

Мой Java класс довольно прост:

@Document(collection="MyCollection") 
public class MyCollection { 

    @Id 
    private ObjectId id; 
    private String field1; 
    ... 
    private ObjectId field5; 
    @Field("Active") 
    private List<Active> active; 

    // Getters & Setters here 

    public static class Active { 
    @Field("Id") 
    private ObjectId id; 

    public ObjectId getId() { 
     return id; 
    } 

    public void setId(ObjectId id) { 
     this.id = id; 
    } 
    } 
} 

Когда я делаю запрос, все происходит правильно, но поле «Актив». Если в этом массиве есть 18 записей, я получу список размером 18, но 18 записей в Active.class все равны нулю - поэтому он получает, что это список, он просто не перетаскивает значения ObjectId в активном массиве ,

Я использую весенний и весенний гонщик.

EDIT: Если я использую Монго-Java-драйвер и запрос таким образом:

DB database = mongoClient.getDB("myDB"); 
    DBCollection collection = database.getCollection("MyCollection"); 

    DBObject query = new BasicDBObject("_id", new ObjectId("123abc...")); 
    DBCursor cursor = collection.find(query); 
    DBObject jo = cursor.one(); 

Он работает, и я получаю весь документ, что я ищу - поэтому я полагаю, есть способ сделать это весной?

ответ

0

Прежде чем я использовал эти версии в моем pom.xml:

<dependency> 
     <groupId>org.mongodb</groupId> 
     <artifactId>mongo-java-driver</artifactId> 
     <version>2.12.1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.data</groupId> 
     <artifactId>spring-data-mongodb</artifactId> 
     <version>1.6.1.RELEASE</version> 
    </dependency> 

Обновляя к одной версии новее для каждого:

<dependency> 
     <groupId>org.mongodb</groupId> 
     <artifactId>mongo-java-driver</artifactId> 
     <version>3.0.2</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.data</groupId> 
     <artifactId>spring-data-mongodb</artifactId> 
     <version>1.7.0.RELEASE</version> 
    </dependency> 

Я был в состоянии решить эту проблему. Так что теперь, когда я делаю запрос:

 return Arrays.asList(mongoTemplate.findById(new ObjectId("123abc..."), Foo.class)); 

Массив ObjectId Возвратится неповрежденным (где, как и прежде я хотел бы получить массив нужного размера - так знали, что там было 18 из них - но это был массив неопределенных значений.

0

Почему вы не использовать аннотацию @Id как в классе MyCollection?

public static class Active { 
@Id 
private ObjectId id; 

} 
Смежные вопросы