2013-12-10 3 views
0

Я использую MondoDB с слоем Morphia 0.105.Неисправность оператора запроса MongoDB/Morphia?

Мой User класс:

@Entity 
public class User { 

@Id 
private ObjectId id = null; 

private String userId = null; 
private String fullName = null; 
@Embedded 
private UserType userType = null; 
@Embedded 
private Set<Rights> rights = new HashSet<Rights>(); 

и мой тестовый класс:

public class Test { 

    public static void main(String[] args) throws UnknownHostException { 
     Morphia m = new Morphia(); 
     Datastore ds = m.createDatastore(new MongoClient("localhost"), "test"); 
     m.map(User.class); 


     User u = new User(); 
     u.setFullName("User Name"); 
     u.setUserId("USERID"); 
     //u.getRights().add(Rights.ADMIN); //NO rights added VS ONE right added 

     ds.save(u); 
     u = ds.find(User.class).filter("rights size", 0).get(); 
     System.out.println(u); 
     System.out.println(u != null); 
    } 

} 

Я получил этот неожиданный результат:

The type(s) for the query/update may be inconsistent; using an instance of type 'java.lang.Integer' for the field 'org.vts.sis2.entities.User.rights' which is declared as 'java.util.Set' 

Если я раскомментировать строки //u.getRights().add(Rights.ADMIN); что добавляет пользователь справа, запрос ds.find(User.class).filter("rights size", 1).get() возвращает corr ect result (даже если отображается предупреждение, но это ложно позитивно, поскольку, на мой взгляд, правильно сравнивать результат оператора размера с целым числом)!

Что я должен делать, чтобы запрашивать пользователей с пустым полем rights list/set?

Благодаря

ответ

1

Попробуйте это:

ds.find(User.class).field("rights").sizeEq(0).get()

+0

же выход, не работает :( – Fuzzo

+1

См https://github.com/mongodb/morphia/issues/561 объяснения. – evanchooly

+0

Это моя открытая проблема. Спасибо за быстрый ответ! – Fuzzo

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