2016-11-08 8 views
0

私はmongodbからSpringフレームワークを介してデータを取得しようとしています。 最初に返品タイプMap<String, Object>を作成しましたが、User値オブジェクトに変更することにしました。春データMongo DB検索データ:@Document VOがnullを返します

以下はここで

@Document(collection = "user") 
public class User { 

    @Id 
    @Field(value="id") 
    private String id; 

    @Field(value="name") 
    private String name; 

    @Field(value="password") 
    private String password; 

    @Field(value="professional") 
    private String professional; 

    @Field(value="email") 
    private String email; 

    @Field(value="gravatar") 
    private String gravatar; 

    @PersistenceConstructor 
    public User(String id, String name, String password, String professional, String email, String gravatar) { 
     super(); 
     this.id = id; 
     this.name = name; 
     this.password = password; 
     this.professional = professional; 
     this.email = email; 
     this.gravatar = gravatar; 
    } 

    public String getId() { 
     return id; 
    } 

    public void setId(String id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getPassword() { 
     return password; 
    } 

    public void setPassword(String password) { 
     this.password = password; 
    } 

    public String getProfessional() { 
     return professional; 
    } 

    public void setProfessional(String professional) { 
     this.professional = professional; 
    } 

    public String getEmail() { 
     return email; 
    } 

    public void setEmail(String email) { 
     this.email = email; 
    } 

    public String getGravatar() { 
     return gravatar; 
    } 

    public void setGravatar(String gravatar) { 
     this.gravatar = gravatar; 
    } 
}; 

とは

@Repository 
public class MongoMemberDao implements CommonDao<String, Map<String, Object>, Exception> { 

    @Autowired 
    MongoTemplate template; 

    final String COLLECTION_NAME = "user"; 

    @SuppressWarnings("unchecked") 
    @Override 
    public Map<String, Object> read(String key) throws Exception { 
     Query findQuery = new Query(); 
     findQuery.addCriteria(Criteria.where("id").is(key)); 
     return template.findOne(findQuery, Map.class, COLLECTION_NAME); 
    } 

    public User readByDocument(String id) throws Exception { 
     Query findOneQuery = new Query(); 
     findOneQuery.addCriteria(Criteria.where("id").is(id)); 
     return template.findOne(findOneQuery, User.class, COLLECTION_NAME); 
    } 
}; 

read方法は罰金を返すデータ

を取得するために @repositoryあるユーザーVOのためのクラスですが、 readByDocumentない( nullない Userインスタンスを返します)。私は official documentを読む。しかし、私はそれを知りません。

FYI、パラメータQueryは両方とも同じに見えます。 Query: { "id" : "system"}, Fields: null, Sort: null

  • 私はなぜreadByDocument戻りnull

感謝を知ってほしいです。

----編集

フォローは私のデータベースであるコンフィグ

@Configuration 
public class MongoConfig extends AbstractMongoConfiguration { 
    private final String MONGO_URL = "127.0.0.1"; 
    private final Integer MONGO_PORT = 27017; 

    @Override 
    protected String getDatabaseName() { 
     return "tfarm"; 
    } 

    @Override 
// @Bean 
    public Mongo mongo() throws Exception { 
     return new MongoClient(MONGO_URL, MONGO_PORT); 
    } 
} 

そして、私は実装WebApplictaionInitializerにこれを追加しました。現在のソリューション

については

+0

スプリング設定ファイルを追加できますか? – Veeram

+0

あなたが持っている '@ Field'アノテーションは完全に冗長であることに注意してください。 – chrylis

+0

@chrylis '@ Field'は別の結果を出すことができますか?私はすでにそれを試してみましたが、何も変わっていません(私がまだ作っていないさらなるプロセスのために注釈を付けました)。とりあえずありがとう。 –

答えて

1

私は@Id(org.springframework.data.annotation.Id) で注釈さフィールドは_idフィールドにマップされます

  • 公式サイトに従いました。
  • アノテーションが付いていないがidという名前のフィールドは、_id フィールドにマップされます。
  • 識別子のデフォルトのフィールド名は_idで、@Fieldアノテーションを使用して をカスタマイズできます。

だから私は私のようなVOを変え...

@Document(collection = "user") 
public class User { 

    @Id 
    private ObjectId _id; 

    @Field(value="id") 
    private String id; 

    @Field(value="name") 
    private String name; 

    @Field(value="password") 
    private String password; 

    @Field(value="professional") 
    private String professional; 

    @Field(value="email") 
    private String email; 

    @Field(value="gravatar") 
    private String gravatar; 

    @PersistenceConstructor 
    public User(String id, String name, String password, String professional, String email, String gravatar) { 
     super(); 
     this.id = id; 
     this.name = name; 
     this.password = password; 
     this.professional = professional; 
     this.email = email; 
     this.gravatar = gravatar; 
    } 

    public String getId() { 
     return id; 
    } 

    public void setId(String id) { 
     this.id = id; 
    } 

    public ObjectId get_id() { 
     return _id; 
    } 

    public void set_id(ObjectId _id) { 
     this._id = _id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getPassword() { 
     return password; 
    } 

    public void setPassword(String password) { 
     this.password = password; 
    } 

    public String getProfessional() { 
     return professional; 
    } 

    public void setProfessional(String professional) { 
     this.professional = professional; 
    } 

    public String getEmail() { 
     return email; 
    } 

    public void setEmail(String email) { 
     this.email = email; 
    } 

    public String getGravatar() { 
     return gravatar; 
    } 

    public void setGravatar(String gravatar) { 
     this.gravatar = gravatar; 
    } 
}; 

ObjectIdを追加しました。代わりに、@Id注釈を削除するだけでも問題はありません。しかし

@Id 
@Field(value="id") 
String id; 

は機能しません。手伝ってくれてありがとう。

関連する問題