0

STS に Roo で生成されたプロジェクトがあり、MongoDB で動作するように更新/削除メソッドをカスタマイズしようとしています (更新と削除をカスケードするため)。親が更新 (削除) されたときに子を更新 (削除) するサービス メソッドを作成しました。

 public class NoteServiceImpl implements NoteService {
    @Autowired
    MongoTemplate mongoTemplate;

    public void updateNotesWithNoteBook(Notebook notebook) {
        Update update = new Update().set("notebook.name", notebook.getName())
                .set("notebook.author", notebook.getAuthor());

        Query query = Query.query(Criteria.where("notebook._id").is(
                new ObjectId(notebook.getId().toString(16))));
        mongoTemplate.updateMulti(query, update, Note.class);
    }
...the similar for delete action

NoteService インターフェイスは Roo によって生成され、次のようになります。

@RooService(domainTypes = { org.dp.mongo.shortnotes.domain.Note.class })
public interface NoteService {
}

親エンティティ Notebook の Roo controller*.aj から Notebook コントローラー クラスへの update メソッドと detete メソッドのプッシュイン リファクタリングを行い、子のサービス メソッドへの呼び出しを追加しました。

@RequestMapping("/notebooks")
@Controller
@RooWebScaffold(path = "notebooks", formBackingObject = Notebook.class)
public class NotebookController {
    @Autowired
    private NoteService noteService;

    @RequestMapping(method = RequestMethod.PUT, produces = "text/html")
    public String update(@Valid Notebook notebook, BindingResult bindingResult,
            Model uiModel, HttpServletRequest httpServletRequest) {
        if (bindingResult.hasErrors()) {
            populateEditForm(uiModel, notebook);
            return "notebooks/update";
        }
        uiModel.asMap().clear();
        notebookService.updateNotebook(notebook);
        **noteService.updateNotesWithNoteBook(notebook);**
        return "redirect:/notebooks/"
                + encodeUrlPathSegment(notebook.getId().toString(),
                        httpServletRequest);
    }

    the similar for delete method...

最後に、noteService にメソッド updateNotesWithNoteBook と delete メソッドがないというエラーが発生しました。それらを修正する方法は?

4

1 に答える 1

0

メソッド updateNotesWithNoteBook は NoteService インターフェイスに存在しますか?

インターフェイスに配置する必要があります。これは、コントローラーから呼び出しているものです。

于 2013-01-12T20:14:44.920 に答える