J'ai une demande écrite au printemps 3.0 accroché à l'aide de mise en veille prolongée à une base de données. J'ai un contrôleur à un formulaire de mise à jour. Chaque fois que le formulaire est soumis, je pense l'objet qui apparaît être mis à jour mais un nouvel objet est créé avec une nouvelle valeur d'identité. J'ai regardé l'échantillon "petclinic" et je ne peux pas voir comment c'est différent.Spring Framework - Nouvel objet est créé dans DB au lieu de la mise à jour
POJO
public class Person
{
private int id;
@NotNull
private String name;
//getter/setter for id
//getter/setter for name
}
Contrôleur
public class PersonUpdateController
{
//injected
private PersonService personService;
@RequestMapping(value="/person/{personId}/form", method=RequestMethod.POST)
public String updateForm(ModelMap modelMap, @PathVariable personId)
{
Person person = personService.getById(personId);
modelMap.addAttribute(person);
return "person/update";
}
@RequestMapping(value="/person/{personId}", method=RequestMethod.POST)
public String update(ModelMap modelMap, @Valid Person person, BindingResult bindingResult)
{
if(bindingResult.hasErrors())
{
modelMap.addAttribute(person);
return "person/update";
}
personService.save(person);
return "redirect:person/" + person.getId() + "/success";
}
}
JSP
<spring:url value="/person/${person.id}" var="action_url" />
<spring:form action="${action_url}" modelAttribute="person" method="POST">
<spring:input name="name" path="name" />
<input type="submit" value="Save" />
</spring:form>
PersonService mise en œuvre
public class HibernatePersonService
implements PersonService
{
//injected
private SessionFactory sessionFactory;
//other methods
public void save(Person person)
{
Session session = sessionFactory.getCurrentSession();
session.saveOrUpdate(person);
}
}
Peut-on voir les lignes pertinentes de 'personService.save (personne)'? –
Ajout de la méthode de sauvegarde demandée par JacobM. –