sql >> データベース >  >> NoSQL >> MongoDB

Springリポジトリは、異なるクラスタイプのエンティティを自動キャストします

    どちらのリポジトリでも、@Queryを使用できます メソッド名から派生したクエリの代わりに使用されるMongoDBJSONクエリ文字列を指定するアノテーション(リポジトリのメソッド名を解析し、MongoDBクエリを構築するための規則があることを知っておく必要があります)。

    したがって、@Queryを使用する 、次のことができます:

    @Repository
    public interface ManagerRepository extends MongoRepository<Employee, String>
    
      @Query(value="{ '_class' : 'com.igmtechnology.gravity.core.init.test.Manager' }")
      List<Person> findAllManagers();
    
    }
    

    舞台裏では、これは次のようなクエリを生成します:

    db.person.findAll({'_class' ; 'com.igmtechnology.gravity.core.init.test.Manager'});
    

    ただし、このコードには小さな問題があります。 Managerの完全修飾クラス名を変更した場合 、その場合、クエリはRuntimeExceptionをスローしません 、しかし何も返しません。この場合、@Query内でワイルドカードを使用できます 。

    @Query(value="{ '_class' : ?0 }")
    List<Person> findAllManagers(String className);
    

    次に、メソッドを呼び出すときに、次のことを実行できます。

    managerRepository.findAllManagers(Manager.class.getName());
    

    提供されたManager.class.getName() ?0を置き換えます ワイルドカードとクエリは適切に作成されます。

    Employeeについても同じことが言えます Employeeの完全修飾クラス名を提供する必要があるという違いがあるリポジトリ @Queryで のvalue 属性。

    詳細:




    1. socket.io-redisの使用例

    2. アトミックにサブドキュメントでmongodbドキュメントを作成しますか?

    3. mongodbでN個のドキュメントを削除する方法

    4. 複数のレコードを持つPyMongoUpdateドキュメント