CRUDRespository 中的 Update 或 SaveorUpdate,是不是有可用的选项
Posted
技术标签:
【中文标题】CRUDRespository 中的 Update 或 SaveorUpdate,是不是有可用的选项【英文标题】:Update or SaveorUpdate in CRUDRespository, Is there any options availableCRUDRespository 中的 Update 或 SaveorUpdate,是否有可用的选项 【发布时间】:2014-08-16 17:15:25 【问题描述】:我正在尝试使用 My Entity bean 进行 CRUD 操作。 CRUDRepository
为 find
、delete
和 save
提供标准方法,但没有像 saveOrUpdate(Entity entity)
这样的通用方法,它依次调用 Hibernate
或 HibernateTemplate
会话 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>
自动做你想做的事。如果实体是新的,它将在entity manager
上调用persist
,否则它将调用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 为您服务。
【讨论】:
嗨,你是对的。我现在遇到了问题,我正在使用 thymeleaf UI 模板和我试图坚持的 Bean,它是 Form bean 而不是 Entity bean,这就是 Spring boot 不保存它的原因。现在我必须将整个 Form bean 转换为具有更改值的 Entity bean 并尝试将其持久化。 如果我已经在扩展 CrudRepository,为什么还要放这个?这会是接口 DAO 中的 @Override 方法吗? @user1342086 这就是重点,你不要添加这个,因为功能已经存在 @geoand 好的,谢谢。我得到了 saveOrUpdate() 但 update() 呢?我尝试查看 CrudRepository.class 但找不到。因此,如果我有一个 Java 对象并且我想搜索数据库以查看该对象是否存在(不是通过 ID 而是通过其他列),那么将如何去做呢? @你会在你的界面中添加一个方法,例如 findByName,Sprig Data 会自动创建它。参考文档有很多例子【参考方案2】:问题是“我正在使用 thymeleaf UI 模板和我试图坚持的 Bean,它是 Form bean 而不是 Entity bean,这就是 Spring boot 不保存它的原因。现在我必须将整个 Form bean 转换为 Entity更改值的 bean 并尝试将其持久化。”我得到了我在项目中遇到的具体问题的解决方案,解决方案是使用 @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)
【讨论】:
以上是关于CRUDRespository 中的 Update 或 SaveorUpdate,是不是有可用的选项的主要内容,如果未能解决你的问题,请参考以下文章