CRUDRespository 中的更新或 SaveorUpdate,是否有任何可用选项

2024-01-02

我正在尝试使用 My Entity bean 执行 CRUD 操作。CRUDRepository提供标准方法find, delete and save但没有可用的通用方法,例如saveOrUpdate(Entity entity)进而调用Hibernate or HibernateTemplate会议saveorUpdate()方法。

The way 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 对象来解决此问题。


方法的实现

<S extends T> S save(S entity)

从界面

CrudRepository<T, ID extends Serializable> extends Repository<T, ID>

自动做你想做的事。如果该实体是新的,它将调用persist on the 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 https://github.com/spring-projects/spring-data-jpa/blob/master/src/main/java/org/springframework/data/jpa/repository/support/SimpleJpaRepository.java#L505。注意SimpleJpaRepository是自动实现的类CrudRepository在 Spring Data JPA 中。

因此,无需提供定制saveOrUpdate()方法。 Spring Data JPA 可以满足您的需求。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CRUDRespository 中的更新或 SaveorUpdate,是否有任何可用选项 的相关文章

随机推荐