2012-02-21 9 views
0

Я не смог найти окончательного ответа, и я надеюсь, что кто-то может мне помочь. Я хочу создать составной индекс для объекта, который «ссылается» на Mongo. Я, очевидно, получаю сообщение об ошибке, которое я опишу ниже фрагментов кода.MongoDB/Morphia Compound Index с DBRef

@Entity 
public class Address { 
    public Address (String street, String City, String state, String zip) { 
     this.street = street; 
     this.city = city; 
     this.state = state; 
     this.zip = zip; 
    } 

    // Getters and Setters 

    @Id private ObjectId id; 
    private String street; 
    private String city; 
    private String state; 
    private String zip; 
} 

@Entity 
@Indexes(@Index("location.city, name")) 
public class Team { 
    public Team (String sport, String name, Address location) { 
     this.sport = sport; 
     this.name  = name; 
     this.location = location; 
    } 

    // Getters and Setters 

    @Id private ObjectId id; 
    private String sport; 
    private String name; 
    @Reference private Address location; 
    @Reference private List<Player> players; 
} 

И ошибка я получаю:

Исключение в потоке «основного» com.google.code.morphia.query.ValidationException: Невозможно использовать дот-нотации прошлого «расположение» не может быть найден в «com.company.test.Team» при проверке - location.city

Так что я думаю, мой вопрос: я получаю эту ошибку, потому что «адрес» является ссылкой в ​​«Team» или я что-то пропустил?

Благодарим за любую отзыв.

ответ

0

Да, вот почему. Ваше поле местоположения ссылается на другую коллекцию - то есть на поле «город» в коллекции «Адрес». У вас есть возможность встроить адрес внутри команды - это сохранит все в коллекции Team и добавит ваш индекс «location.city» в класс/коллекцию «Команда».