2012-04-25 30 views
5

làm cách nào để chỉ định bộ sưu tập mà tôi muốn lưu trữ của mình?Dữ liệu Spring MongoDB: thiết lập bộ sưu tập kho lưu trữ?

cấu hình của tôi:

<!-- 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"/> 

tài liệu của tôi:

@Document 
public class User { 

    @Id String id; 
    @Indexed String email; 

    ...getters and setters omitted... 

} 

kho cho người sử dụng thu (là bên trong ... mongodb.repositories gói). Tôi mở rộng từ CrudRepository:

public interface UserRepository extends CrudRepository<User, String>{ 
    User findByEmail(String email); 
} 

và cuối cùng, một bộ điều khiển của servlet mùa xuân của tôi trong đó tôi muốn sử dụng UserRepository:

@Controller 
public class MyController { 

    @Autowire UserRepository repo; 

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

} 

tôi thiết lập một số người dùng ví dụ thông qua giao diện điều khiển, các mongoTemplate. getCollection ("người dùng"). count() hoạt động tốt. Kho lưu trữ không tìm thấy gì.

... làm cách nào để UserRepository biết rằng tôi muốn tìm kiếm người dùng trong bộ sưu tập "người dùng"?/Đây có phải là cách thích hợp để sử dụng các kho lưu trữ không?

... Intellij IDEA không nhận ra sự tự động của UserRepository. Mặc dù nó hiển thị một lỗi, nó biên dịch và ném không có ngoại lệ. Có điều gì tôi có thể làm được không?

Trả lời

5

này là một phần của tài liệu có thể có câu trả lời bạn đang tìm kiếm:

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

Có hai cách để quản lý tên bộ sưu tập được sử dụng cho hoạt động trên tài liệu. Tên bộ sưu tập mặc định được sử dụng là tên lớp đã thay đổi để bắt đầu bằng chữ thường. Vì vậy, một lớp com.test.Person sẽ được lưu trữ trong bộ sưu tập "người". Bạn có thể tùy chỉnh điều này bằng cách cung cấp tên bộ sưu tập khác bằng chú thích @Document. Bạn cũng có thể ghi đè tên bộ sưu tập bằng cách cung cấp tên bộ sưu tập của riêng mình làm tham số cuối cùng cho các cuộc gọi phương thức MongoTemplate đã chọn.

+4

"Bạn cũng có thể ghi đè tên bộ sưu tập bằng cách cung cấp tên bộ sưu tập của riêng mình làm tham số cuối cùng cho phương thức MongoTemplate đã chọn" điều này buộc bạn không sử dụng giao diện Repository và bạn phải sử dụng MongoTemplate. cách nào khác để làm việc với giao diện Repository ?? –

+2

Tôi nghĩ rằng nó cố gắng sử dụng "người dùng" theo mặc định, vì lớp chú thích @Document của bạn là "Người dùng". Nhưng có vẻ như bộ sưu tập của bạn là "người dùng". Hãy thử @Document (collection = "users")? – sdouglass

Các vấn đề liên quan