我正在尝试使用My Entity bean进行CRUD操作。 CRUDRepository
为find
,delete
和save
提供了标准方法,但没有像[{1}}这样的通用方法可以调用saveOrUpdate(Entity entity)
或{ {1}}会话Hibernate
方法。
HibernateTemplate
提供此功能的方式是
像这样使用
saveorUpdate()
但这不是通用的,需要为完整的表单字段编写。 如果有任何方法或者我可以获得Hibernate的会话或Spring HibernateTemplate的对象来解决这个问题,请告诉我。
答案 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) {
}