Spring 3.0 manière
@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);
}
}
Où BookRepository peut être écrit comme
@Repository
public class BookRepository extends AbstractRepository<Book, Integer> {
@Autowired
private SessionFactory sessionFactory;
@Override
public void merge(Book book) {
sessionFactory.getCurrentSession().update(book);
}
}
Si vous voulez, vous pouvez créer une commande personnalisée UpdateTitleUseCase classe qui encapsule les attributs previousTitle et newTitle. De cette façon, votre contrôleur ressemble à
@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);
}
Le point d'utilisation de Spring est que vous pouvez ignorer tout ce code standard. Voir ici: http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/orm.html#orm-hibernate-straight –
Oui je le sais, mais à l'origine il n'y avait pas beaucoup spécifié dans la question, donc je viens de donner un aperçu très basique des étapes nécessaires pour faire une mise à jour. Bien sûr, vous pouvez utiliser un gestionnaire de transactions et d'autres choses, mais ce n'est pas le point de la question, je crois ... –