2015-06-01 73 views
0

嗨,我使用的是springboot的mongodb,無法根據@DBRef獲取記錄。我之情況是:如何在mongodb的collection中使用@DBRef獲取記錄?

我有AuthenticationToken收集和用戶收集如下:

{ 
    "_id" : ObjectId("556bdfc2ccf2e6509f8a2849"), 
    "_class" : "com.samepinch.domain.user.AuthenticationToken", 
    "token" : "2efd1cfe-2f2f-4163-b500-bac6e4654287", 
    "createdDate" : ISODate("2015-06-01T04:29:54.364Z"), 
    "updatedDate" : ISODate("2015-06-01T04:29:54.364Z"), 
    "user" : DBRef("users", ObjectId("556bdfc2ccf2e6509f8a2848")) 
} 

和用戶

{ 
    "_id" : ObjectId("556bdfc2ccf2e6509f8a2848"), 
    "_class" : "com.samepinch.domain.user.User", 
    "age" : 0, 
    "username" : "[email protected]", 
    "roles" : [ 
     "ROLE_USER" 
    ], 
    "firstName" : "abc", 
    "lastName" : "mno", 
    "email" : "[email protected]", 
    "gender" : "male", 
    "isAccountLocked" : false, 
    "prefAgeFrom" : 0, 
    "prefAgeTo" : 0, 
    "notificationNewMatch" : true, 
    "notificationMessage" : true, 
    "createdDate" : ISODate("2015-06-01T04:29:54.325Z"), 
    "updatedDate" : ISODate("2015-06-01T04:29:54.325Z") 
} 

現在我想獲得用戶ID的認證收集的基礎上的身份驗證令牌。

我正在使用Mongo Repository根據用戶標識獲取AuthenticationToken,但它不工作。

要提取AuthenticationToken

步驟1

public AuthenticationToken findByUserId(String userId){ 
     ObjectId objId = new ObjectId(userId); 
     return authRepository.findByUserId(objId); 
    } 

步驟2

public interface AuthenticationTokenRepository extends MongoRepository<AuthenticationToken, String> { 

    AuthenticationToken save(AuthenticationToken token); 

    AuthenticationToken findByToken(String token); 

    @Query("{'user._id' : ?0}") 
    AuthenticationToken findByUserId(ObjectId objId); 
} 

我按照上述步驟,從DB獲取AuthenticationToken但得到空。以前它工作的很好,當我沒有使用認證域中的用戶時使用@DBRef。

AuthenticationToken

public class AuthenticationToken extends BaseEntity{ 

    @JsonProperty 
    String token; 

    @DBRef 
    User user; 

    public AuthenticationToken(String token,User user){ 
     this.token = token; 
     this.user = user; 
    } 

    public User getUser() { 
     return user; 
    } 

    public void setUser(User user) { 
     this.user = user; 
    } 

    public String getToken() { 
     return token; 
    } 

    public void setToken(String token) { 
     this.token = token; 
    } 



} 

回答

1

這不是什麼大不了的,使用Spring數據MongoDB的標準像

Query query = new Query(Criteria.where("user.$id").is(new ObjectId(userId))); 
     AuthenticationToken token = mongoTemplate.findOne(query, AuthenticationToken.class); 
+0

感謝@Prabjot它現在的工作:) – Qasim