12

リファレンス 4.4 カスタム実装に従ってカスタム クエリを実装しようとしています。

http://static.springsource.org/spring-data/data-mongodb/docs/current/reference/html/repositories.html

Spring Data の MongoTemplate と MongoRepository の違いは何ですか?

mongoTemplate を使用した特別なクエリが必要なため、これを行っています。

私が得ているエラーは PropertyReferenceException です。そのため、spring-data は、不要なクエリを自動生成しようとしているようです。独自のカスタム クエリを使用したい。

org.springframework.data.mapping.PropertyReferenceException: No property search found for type com.eerra.core.common.dto.User

問題はここでも説明されていますが、解決策がうまくいかないようです:

http://forum.springsource.org/showthread.php?114454-Custom-repository-functionality

質問

spring-data がクエリを自動生成しようとせずに、カスタム クエリ インターフェイスと実装を実装するにはどうすればよいですか?

構成

春の構成

spring-data.xml

<!-- Spring Data MongoDB repository support -->
<mongo:repositories base-package="com.eerra.*.common.service" />

リポジトリ クラスとインターフェイスは、次のパッケージにあります。

com.eerra.core.common.service.UserRepositoryInterface.java com.eerra.core.common.service.UserRepositoryCustom.java (インターフェース) com.eerra.core.common.service.UserRepositoryCustomImpl.java (実装)

UserRepositoryCustom.java

public interface UserRepositoryCustom {
    List<User> searchAllUsers();
}

UserRepositoryCustomImpl.java

public class UserRepositoryCustomImpl implements UserRepositoryCustom {

    @Autowired
    private MongoTemplate mongoTemplate;

    @Override
    public List<User> searchAllUsers() {
        return mongoTemplate.findAll(User.class);
    }
}

UserRepositoryInterface.java

@Repository
public interface UserRepositoryInterface extends MongoRepository<User, String>, UserRepositoryCustom {
    User findByEmail(String email);
    List<User> findByEmailLike(String email);
    List<User> findByEmailOrLastName(String email, String lastName);
    List<User> findByEmailOrFirstNameLike(String email, String firstName);

    @Query("{\"$or\" : [ { \"email\" : { \"$regex\" : ?0, \"$options\" : \"i\"}} , " +
        "{ \"firstName\" : { \"$regex\" : ?0, \"$options\" : \"i\"}}, " +
        "{ \"lastName\" : { \"$regex\" : ?0, \"$options\" : \"i\"}}]}")
    List<User> findByEmailOrFirstNameOrLastNameLike(String searchText);
}
4

1 に答える 1

26

問題は解決された。このエラーは、Impl クラスの名前が間違っている場合に表示されます。Impl クラスは、リポジトリ クラスに従って名前を付ける必要があります。したがって、この例では次のような名前にする必要があります。

  • com.eerra.core.common.service.UserRepositoryInterface.java (メイン リポジトリ)
  • com.eerra.core.common.service.UserRepositoryInterfaceImpl.java (カスタム リポジトリ メソッドの実装)
  • com.eerra.core.common.service.UserRepositoryInterfaceCustom.java (カスタム メソッドとのインターフェース)

ここで答えを参照してください: Spring Data の MongoTemplate と MongoRepository の違いは何ですか?

于 2013-06-13T10:38:44.327 に答える