在CRUDRepository中更新和SaveorUpdate,有没有可用的选项

时间:2014-06-26 00:11:02

标签: spring spring-boot

我正在尝试使用My Entity bean进行CRUD操作。 CRUDRepositoryfinddeletesave提供了标准方法,但没有像[{1}}这样的通用方法可以调用saveOrUpdate(Entity entity)或{ {1}}会话Hibernate方法。

HibernateTemplate提供此功能的方式是 像这样使用

saveorUpdate()

但这不是通用的,需要为完整的表单字段编写。 如果有任何方法或者我可以获得Hibernate的会话或Spring HibernateTemplate的对象来解决这个问题,请告诉我。

2 个答案:

答案 0 :(得分:91)

方法的实施

<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);
    }
}

并且可以找到here。请注意,SimpleJpaRepository是在Spring Data JPA中自动实现CrudRepository的类。

因此,无需提供自定义saveOrUpdate()方法。 Spring Data JPA为您提供了帮助。

答案 1 :(得分:0)

我得到了解决方案,解决方案是使用@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) {

}