У меня есть некоторые проблемы с выполнением метода findOne класса MongoOperations, так как теперь этот метод возвращает null. Структура моей информации в mongoDB выглядит так:Реализация findOne в Spring Data (MongoDB)
> db.news.find({_id:1})
{ "_id" : 1, "title" : "first title", "text" : "first text" }
> db.news.find({_id:{$type:1}})
{ "_id" : 1, "title" : "first title", "text" : "first text" }
Как вы можете видеть выше, поле _id имеет двойной тип. Мои классы Java выглядят так:
@Repository
public class NewsService {
@Autowired
private MongoOperations mongoOperations;
public static final String COLLECTION_NAME = "news";
//this method executes ok
public List<NewsEntity> getAllNews() {
return mongoOperations.findAll(NewsEntity.class, COLLECTION_NAME);
}
//but this method return null
public NewsEntity getNewsDetail(Long id) {
return mongoOperations.findOne(Query.query(Criteria.where("_id").is(id)), NewsEntity.class);
}
Entity Класс:
@Document
public class NewsEntity {
@Id
private Long id;
private String title;
private String text;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}
И Спринг контроллер:
@Controller
public class MainController {
@Autowired
private NewsService newsService;
@RequestMapping(value="/news/details/{newsId}",method = RequestMethod.GET)
public String getNewsDetails(ModelMap model, @PathVariable("newsId") Long newsId) {
//newsEnt is null here...
NewsEntity newsEnt = newsService.getNewsDetail(newsId);
model.addAttribute("newsDet", newsEnt);
return "newsdetails";
}
}
Нет коллекции, выбранной на вашем ['findOne()'] (http://docs.spring.io/spring-data/mongodb/docs/1.3.5.RELEASE/api/org/springframework/data/ mongodb/core/MongoOperations.html # findOne). Поскольку вы вызываете mongooperations напрямую без извлечения коллекции, вам нужно использовать этот тип подписи метода. –
Привет, Нейл, для меня это совершенно непонятно. Вы имеете в виду, что я должен добавить новый метод (collectionName) в метод findOne следующим образом: T findOne (Запрос запроса, Класс entityClass, String collectionName) –
Iurii