如何指定我想要我的存储库的集合?
我的配置:
<!-- 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"/>
我的文件:
@Document
public class User {
@Id String id;
@Indexed String email;
...getters and setters omitted...
}
用户集合的存储库(位于... mongodb.repositories包中)。我从CrudRepository扩展了:
public interface UserRepository extends CrudRepository<User, String>{
User findByEmail(String email);
}
最后,我的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"));
...
}
}
我通过控制台设置了一些示例用户,mongoTemplate.getCollection(“users”)。count()工作正常。存储库什么也没找到。
... UserRepository如何知道我想搜索集合“users”中的用户?/这是使用存储库的正确方法吗?
... Intellij IDEA无法识别UserRepository的自动装配。虽然它显示错误,但它编译并且不会抛出任何异常。我能做些什么吗?
答案 0 :(得分:7)
这部分文档可能有你想要的答案:
有两种方法可以管理用于在文档上操作的集合名称。使用的默认集合名称是更改为以小写字母开头的类名。因此,com.test.Person类将存储在“person”集合中。您可以使用@Document注释提供不同的集合名称来自定义它。您还可以通过提供自己的集合名称作为所选MongoTemplate方法调用的最后一个参数来覆盖集合名称。