2016-12-08 6 views
2

私はSpring Data MongoDBがエンティティにフィールドを設定する方法は?私はfindByメソッドを呼び出すと

public interface UserRepository extends MongoRepository<User, Long> { 

    User findById(Long id); 
} 

と私のエンティティPOJO MongoRepositoryクラスを持っているが、この

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

    Long id; 
    String name; 
    Department department; 
    … 
} 

のように見え、ユーザーオブジェクトが返されます。 Spring Data MongoDBがDBObjectをどのようにJavaオブジェクトに変換するのかを知りたい私は、Spring Data MongoDBがクラス内のフィールド名または@Field Annotationに基づいてJava(Entity)クラスのsetters/constructorsメソッドを呼び出す、ある種のマッパー(Jackson?)をフードの下で使用しているという印象を受けました。しかし、私の驚いたことに、セッターは決して呼び出されません。既定のコンストラクターのみが呼び出されます。

フィールドはどのように設定されていますか?私が求めている理由は、セッターが呼び出されれば、他のフィールドを設定するオプションが私に与えられるということです。

ありがとうございます。

+0

文字列として日付を保存するための特別な理由はありますか? – Veeram

+0

こんにちは、 返信いただきありがとうございます。私が読んでいるいくつかの外部データベースです。私はそれを支配していない。 :) – pvpkiran

答えて

2

春データのデフォルトは、我々がドン追加のロジックを含めることができているを導入することができ、同じhere

について読むことができます事故によって誘発したくない。それが実際に必要な場合は、クラスに@AccessType(Type.PROPERTY)と注釈を付けることでプロパティへのアクセスに切り替えることができます。

1

スプリングには、その下のレイヤーにエンティティコンバータがあります。これは、リフレクションを使用して、フィールド、変数、および署名のタイプを読み取ります。変換ロジックは、すべてのデータリポジトリに共通です。あなたはまた、カスタムコンバータもそれあなたやジャクソン、それの例は、アクセサメソッド、フィールドへのアクセスにhere

+0

こんにちは、返信いただきありがとうございます。 私はリンクを調べて、私自身のコンバータを実装しようとしました。しかし、それは助けにはならない。 基本的には、日付フィールドを変換する必要があります。 mongoでは、文字列として格納されます。しかし、私のpojo(Entityクラス)では、DateまたはLocalDateTimeとしてマップしたいと思います。しかし、私は、LocalDateTimeにStringのコンバータを書いたとき、SpringはDBObjectのすべてのStringフィールドをLocalDateTimeに変換しようとします。 特定のフィールドのみを別のタイプに変換するにはどうすればよいですか? ありがとう – pvpkiran

関連する問題