2012-06-07 2 views
1

Как загрузить два атрибута НТДА/объект с использованием морфияMongoDB, как загрузить два атрибута ссылочного документа с использованием морфия

У меня есть класс Person и школа как этот
люди класс

@Entity 
public class Person { 
    @Id private ObjectId id; 
    private String name; 
    @Embedded private PersonEducation schoolInfo; 
} 
@Embedded 
public class PersonEduction { 
    @Reference private School school; 
    private String year; 
    private String degree; 
} 


Школа класс

@Entity 
public class School { 
    @Id private ObjectId id; 
    private String name; 
    private String address; 
    private String description; 
} 

Как я могу получить идентификатор и имя и полей школы в классе Person пример Когда я хочу человек

Person person = datastore.find(Person.class).field("name").equals("xyz").get(); 
person.gerSchoolInfo(); 

Response (Не хотят все поля класса школы)

{school:{_id:ObjectId("4fcef3e20364a375e7631fb0"), name:"SchoolA"}, year:"1990", degree:"MBA" } 

и если я запрашиваю школу, где _id = ObjectId ("4fcef3e20364a375e7631fb0"), я получаю всю школу поля

{_id:ObjectId("4fcef3e20364a375e7631fb0"), name:"xyz", address="some add", description="some desc"} 
+0

Итак, вы хотите загрузить объект (в данном случае типа School), но загружать только некоторые поля из Mongo? Нельзя ли загружать очень большое/сложное поле? –

+0

Да, чтобы избежать загрузки ненужных полей –

ответ

1

Вместо использования @Reference вы должны использовать

key<School> school; 

и использовать пользовательский запрос для его загрузки.

datastore.createQuery(School.class).retrivedFields(true, "id","name"); 
+0

Я ищу ответ моей интеграции spring-mongodb. Концепция и абстракция в spring-mongodb одинаковы, укажите, какие поля вы хотите загрузить в объекте «Запрос». –

0

Чтобы дать альтернативу mtariq заменить

@Reference private School school; 

с

private ObjectId schoolId; 

и принести его самостоятельно. Однако, так как ваш класс школы настолько прост, я думаю, вы бы лучше с помощью отложенной загрузки, так:

@Reference @Lazy private School school; 

Это будет только загрузить объект школы, когда/если он ссылается.

+0

@ Lazy загрузит все поля школы, где ему нужны только определенные поля. – mtariq

+0

Да, ObjectId может быть хорошей альтернативой – mtariq

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