2013-12-10 3 views
0

Morfia 0.105 레이어가있는 MondoDB를 사용하고 있습니다.MongoDB/Morphia 크기 쿼리 연산자 오작동?

@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>(); 

내 테스트 클래스는 다음과 같습니다 :

User 클래스입니다 내가 주석 라인 //u.getRights().add(Rights.ADMIN);에 추가하는 경우

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' 

:

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); 
    } 

} 

내가이 예상치 못한 결과를 얻었다 사용자가 오른쪽, 쿼리 ds.find(User.class).filter("rights size", 1).get() corr을 반환합니다. ect 결과 (경고가 표시 되더라도, 그것이 내 의견으로는 크기 연산자의 결과를 정수와 비교하기 때문에 거짓 긍정입니다!)

빈 필드가 rights 인 사용자를 쿼리하려면 어떻게해야합니까?

답변

1

이 시도

감사 :

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

+0

같은 출력이 작동하지 않습니다 :( – Fuzzo

+1

는 설명 https://github.com/mongodb/morphia/issues/561를 참조하십시오. – evanchooly

+0

그것은 내 오픈 된 문제입니다. 빠른 응답을 주셔서 감사합니다 – Fuzzo