Обновить или SaveorUpdate в CRUDRespository, есть ли доступные варианты
Я пытаюсь выполнять операции CRUD с My Entity bean. CRUDRepository
предоставляют стандартные методы find
, delete
и save
, но не существует общего метода, такого как saveOrUpdate(Entity entity)
, который в свою очередь вызывает методы Hibernate
или HibernateTemplate
sessions saveorUpdate()
.
Способ CRUDRepository
обеспечивает эту функциональность:
используйте это как
@Modifying
@Query("UPDATE Space c SET c.owner = :name WHERE c.id = :id")
Integer setNameForId(@Param("name") String name, @Param("id")
но это не является общим и должно быть записано для полных полей формы.
Пожалуйста, дайте мне знать, если есть какой-либо способ, или я могу получить сеанс Hibernate или объект Spring HibernateTemplate для решения этой проблемы.
Ответы
Ответ 1
Реализация метода
<S extends T> S save(S entity)
из интерфейса
CrudRepository<T, ID extends Serializable> extends Repository<T, ID>
автоматически делает то, что вы хотите. Если объект новый, он вызовет persist
в entity manager
, иначе он вызовет merge
Код выглядит следующим образом:
public <S extends T> S save(S entity) {
if (entityInformation.isNew(entity)) {
em.persist(entity);
return entity;
} else {
return em.merge(entity);
}
}
и можно найти здесь. Обратите внимание, что SimpleJpaRepository
- это класс, который автоматически реализует CrudRepository
в Spring Data JPA.
Поэтому нет необходимости поставлять собственный метод saveOrUpdate()
. Spring Данные JPA вы рассмотрели.
Ответ 2
Я получил решение. Решение использует @ModelAttribute для преобразования формы bean в сущность.
@ModelAttribute("spaceSummary")
public SpaceSummary getSpaceSummary(int id){
return this.spaceSummaryService.getSpaceSummary(id);
}
и
@RequestMapping(value="/mgr/editSpace", method = RequestMethod.POST)
public ModelAndView editSpace(@ModelAttribute("spaceSummary") SpaceSummary
spaceSummary, BindingResult result, RedirectAttributes redirect, ModelAndView model) {
}