2015-07-10 2 views
0

Функция HasAnyOf Morphia, похоже, не работает или Im делает что-то неправильно.Morphia - HasAnyOf

Данные сохраняются правильно на БД. Im помощью морфия 1.0.1 с MongoDB/Drive 3.0.1

Ниже моего класса отображения и запроса:

//freight 
@Entity(value="freight", noClassnameStored = true) 
public class Freight extends BaseEntity { 
@Embedded 
protected List<Vehicle> vehicles; 

//vehicle 
@Entity(value="vehicle", noClassnameStored = true) 
public class Vehicle extends BaseEntity{... 

//Query 
Query<Freight> query = getDatastore().createQuery(Freight.class); 
    query.disableValidation(); 

if(vo.getVehicles() != null && !vo.getVehicles().isEmpty()){ 
     query.field("vehicles").hasAnyOf(vo.getVehicles());  
    }  

    return query.asList(); 

Любое предложение можно только приветствовать.

Спасибо!

ответ

1

Это должно сработать - мы используем .hasAnyOf() с теми же версиями.

Вы, вероятно, следует изменить сущность транспортного средства для

//vehicle 
@Embedded 
public class Vehicle {... 

Поскольку вы встраивание его, это не (автономный) объект. Я не уверен, что делает BaseEntity, но если он добавляет ObjectId, timestamps, ... - это не обязательно для встроенных объектов, поскольку вся информация уже находится в фрахте.

+0

Это действительно хорошо работает. Я делал ошибку. Спасибо @xeraa –

+0

Если проблема решена, отметьте ее соответствующим образом – xeraa

0

Я понял, что на класс транспортного средства следует ссылаться вместо встроенного, чем я изменил отображение и попытался использовать hasAnyOf, и он не работал.

Я нашел обходной путь на этом посту Using the $in operator through Morphia - doing it wrong?, и он отлично работал, но это не изящное решение.

Полезно знать, что hasAnyOf работает для внедренных объектов.

Спасибо!