Spring 3.0 way
@Controller
public class BookController {
@Autowired
private BookRepository<Book, Integer> bookRepository;
@RequestMapping(method=RequestMethod.POST)
public void updateTitle(@RequestParam("bookId") Integer bookId,
@RequestParam("previousTitle") String previousTitle,
@RequestParam("newTitle") String newTitle) {
Book book = bookRepository.findById(bookId);
book.setPreviousTitle(previousTitle);
book.setNewTitle(newTitle);
bookRepository.merge(book);
}
}
Где BookRepository может быть записан как
@Repository
public class BookRepository extends AbstractRepository<Book, Integer> {
@Autowired
private SessionFactory sessionFactory;
@Override
public void merge(Book book) {
sessionFactory.getCurrentSession().update(book);
}
}
Если вы хотите, вы можете создать собственный класс команд UpdateTitleUseCase , который инкапсулирует previousTitle и newTitleатрибутов .Таким образом, ваш контроллер выглядит как
@RequestMapping(method=RequestMethod.POST)
public void updateTitle(UpdateTitleUseCase command) {
Book book = bookRepository.findById(command.getBookId());
book.setPreviousTitle(command.getPreviousTitle());
book.setNewTitle(command.getNewTitle());
bookRepository.merge(book);
}