Spring Data MongoDB:设置存储库集合?

Eik*_*chu 6 spring autowired mongodb

如何指定我想要我的存储库的集合?

我的配置:

<!-- Database -->
<mongo:mongo id="mongoDb" host="localhost" port="27017"/>
<mongo:db-factory id="mongoDbFactory" mongo-ref="mongoDb" dbname="test"/>

<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
    <constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/>
</bean>

<mongo:repositories base-package="de.cochu.springtest.mongodb.repositories"/>
Run Code Online (Sandbox Code Playgroud)

我的文件:

@Document
public class User {

    @Id String id;
    @Indexed String email;

    ...getters and setters omitted...

}
Run Code Online (Sandbox Code Playgroud)

用户集合的存储库(位于... mongodb.repositories包中).我从CrudRepository扩展:

public interface UserRepository extends CrudRepository<User, String>{
    User findByEmail(String email);
}
Run Code Online (Sandbox Code Playgroud)

最后,我的Spring servlet的控制器,我想在其中使用UserRepository:

@Controller
public class MyController {

    @Autowire UserRepository repo;

    @RequestMapping("/test.html")
    public String something(HttpServletRequest request) {
        User u = userRepository.findByEmail(request.getParameter("email"));
        ...
    }

}
Run Code Online (Sandbox Code Playgroud)

我通过控制台设置了一些示例用户,mongoTemplate.getCollection("users").count()工作正常.存储库什么都没找到.

... UserRepository如何知道我想搜索集合"users"中的用户?/这是使用存储库的正确方法吗?

... Intellij IDEA无法识别UserRepository的自动装配.虽然它显示错误,但它编译并且不会抛出任何异常.我能做些什么吗?

sdo*_*ass 7

这部分文档可能有您正在寻找的答案:

http://static.springsource.org/spring-data/data-mongodb/docs/current/reference/html/#mongo-template.save-insert.collection

有两种方法可以管理用于在文档上操作的集合名称.使用的默认集合名称是更改为以小写字母开头的类名.因此,com.test.Person类将存储在"person"集合中.您可以使用@Document注释提供不同的集合名称来自定义它.您还可以通过提供自己的集合名称作为所选MongoTemplate方法调用的最后一个参数来覆盖集合名称.

  • "你也可以通过提供自己的集合名称作为所选MongoTemplate方法调用的最后一个参数来覆盖集合名称"这迫使你不使用Repository接口,你必须使用MongoTemplate,有没有其他方法可以工作与存储库接口? (4认同)
  • 我认为它默认使用"user",因为你的@Document注释类是"User".但听起来你的收藏品是"用户".试试@Document(collection ="users")? (2认同)