it-swarm.com.de

Update oder SaveorUpdate in CRUDRespository. Sind Optionen verfügbar?

Ich versuche, CRUD-Operationen mit der My Entity-Bean durchzuführen. CRUDRepository bietet Standardmethoden für find, delete und save, aber es gibt keine generische Methode wie saveOrUpdate(Entity entity), die wiederum Hibernate- oder HibernateTemplate sessions saveorUpdate()-Methoden aufruft.

CRUDRepository bietet diese Funktionalität für die Verwendung dieser Funktion

@Modifying
@Query("UPDATE Space c SET c.owner = :name WHERE c.id = :id")
Integer setNameForId(@Param("name") String name, @Param("id")

dies ist jedoch nicht generisch und muss für vollständige Formularfelder geschrieben werden. Bitte lassen Sie mich wissen, ob es eine Möglichkeit gibt, oder ich kann eine Sitzung von Hibernate oder ein Objekt von Spring HibernateTemplate erhalten, um dieses Problem zu lösen. 

35

Die Implementierung der Methode

<S extends T> S save(S entity)

von der Schnittstelle

CrudRepository<T, ID extends Serializable> extends Repository<T, ID>

macht automatisch was du willst. Wenn die Entität neu ist, ruft sie persist auf dem entity manager Auf, andernfalls ruft sie merge auf.

Der Code sieht folgendermaßen aus:

public <S extends T> S save(S entity) {

    if (entityInformation.isNew(entity)) {
        em.persist(entity);
        return entity;
    } else {
        return em.merge(entity);
    }
}

und kann gefunden werden hier . Beachten Sie, dass SimpleJpaRepository die Klasse ist, die CrudRepository in Spring Data JPA automatisch implementiert.

Daher ist es nicht erforderlich, eine benutzerdefinierte saveOrUpdate() -Methode anzugeben. Spring Data JPA hat Sie abgedeckt.

96
geoand

Ich habe die Lösung erhalten. Die Lösung ist @ModelAttribute, um die Form-Bean in eine Entität zu konvertieren.

@ModelAttribute("spaceSummary")
public SpaceSummary getSpaceSummary(int id){
    return this.spaceSummaryService.getSpaceSummary(id);
}

und

@RequestMapping(value="/mgr/editSpace", method = RequestMethod.POST)
public ModelAndView editSpace(@ModelAttribute("spaceSummary") SpaceSummary                
spaceSummary, BindingResult result, RedirectAttributes redirect, ModelAndView model) {

}
0