Reputation: 879
I am trying to do CRUD operations with My Entity bean. CRUDRepository
provide standard methods to find
, delete
and save
but there is no generic method available like saveOrUpdate(Entity entity)
that in turn calls Hibernate
or HibernateTemplate
sessions saveorUpdate()
methods.
The way CRUDRepository
provides this functionality is to
use like this
@Modifying
@Query("UPDATE Space c SET c.owner = :name WHERE c.id = :id")
Integer setNameForId(@Param("name") String name, @Param("id")
but this is not generic and needs to be written for complete form fields. Please let me know if there is any way or i can get session of Hibernate or object of Spring HibernateTemplate to solve this issue.
Upvotes: 50
Views: 110868
Reputation: 879
The issue is "i am using thymeleaf UI template and The Bean that i am trying to persist that is Form bean not Entity bean and that's why Spring boot is not saving it. Now i have to convert the entire Form bean into Entity bean with changed values and try to persist it." I got the solution for the specific problem i faced in my project, The solution is use @ModelAttribute to convert the form bean to entity.
@ModelAttribute("spaceSummary")
public SpaceSummary getSpaceSummary(int id){
return this.spaceSummaryService.getSpaceSummary(id);
}
and
@RequestMapping(value="/mgr/editSpace", method = RequestMethod.POST)
public ModelAndView editSpace(@ModelAttribute("spaceSummary") SpaceSummary
spaceSummary, BindingResult result, RedirectAttributes redirect, ModelAndView model) {
}
Upvotes: -3
Reputation: 64039
The implementation of the method
<S extends T> S save(S entity)
from interface
CrudRepository<T, ID extends Serializable> extends Repository<T, ID>
automatically does what you want. If the entity is new it will call persist
on the entity manager
, otherwise it will call merge
The code looks like this:
public <S extends T> S save(S entity) {
if (entityInformation.isNew(entity)) {
em.persist(entity);
return entity;
} else {
return em.merge(entity);
}
}
and can be found here. Note that SimpleJpaRepository
is the class that automatically implements CrudRepository
in Spring Data JPA.
Therefore, there is no need to supply a custom saveOrUpdate()
method. Spring Data JPA has you covered.
Upvotes: 116