Spring Data MongoDB:如何设置仓库集合?

7

我该如何指定我的存储库要使用的集合?

我的配置:

<!-- 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 如何知道我想要在“用户”集合中搜索用户?/这是否是使用存储库的正确方式?

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

1个回答

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

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

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


4
您可以通过在选择的MongoTemplate方法调用的最后一个参数中提供自己的集合名称来覆盖集合名称。这迫使您不使用存储库接口,而是必须使用MongoTemplate,是否有其他方法可以使用存储库接口进行工作? - Bassem Reda Zohdy
2
我认为它默认使用“user”,因为您的@Document注释类是“User”。但是听起来你的集合是“users”。尝试使用@Document(collection="users")? - sdouglass
1
如果我有两个不同的集合用于相同的实体,那么在这种情况下使用存储库是否可行? - Akash

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接