当前位置: 首页 > 面试题库 >

CRUDRespository中的Update或SaveorUpdate,有没有可用的选项

朱兴安
2023-03-14
问题内容

我正在尝试使用“我的实体” Bean进行CRUD操作。CRUDRepository提供标准的方法find,deletesave但它有没有像一般的方法saveOrUpdate(Entity entity)是依次呼叫HibernateHibernateTemplate会话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的对象来解决此问题。


问题答案:

方法的执行

<S extends T> S save(S entity)

从界面

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

自动执行你想要的操作。如果实体是新的,它会调用persistentity manager,否则它会调用merge

代码如下:

public <S extends T> S save(S entity) {

    if (entityInformation.isNew(entity)) {
        em.persist(entity);
        return entity;
    } else {
        return em.merge(entity);
    }
}

请注意,这SimpleJpaRepositoryCrudRepository在Spring Data JPA 中自动实现的类。

因此,无需提供自定义saveOrUpdate()方法。Spring Data JPA为你服务。



 类似资料:
  • 我正在尝试用我的实体bean执行CRUD操作。提供了用于、和的标准方法,但没有类似于的通用方法,该方法反过来调用或会话方法。 提供此功能的方式如下所示 但这不是通用的,需要为完整的表单字段编写。请让我知道是否有任何方法或我可以得到会话的Hibernate或对象的Spring HibernateTemplate来解决这个问题。

  • 问题内容: 我正在向数据库中插入大约500 000个对象,其中许多对象是相同的(数据库中具有相同的主键表示),但是其他字段可能不同,因此我使用的方法是“更新-如果没有受影响的行-插入”。问题在于,有时对象的某些字段设置为null(无法从文件读取),并且已经在数据库中设置了某些值,因此我将其更新为null =删除它。)如何实现方案,即只更新字段不为空? 这是我现在如何做的一个简单示例: 问题答案:

  • 问题内容: 是否可以通过量角器或WebDriver物理关闭选项卡? 我问是因为虽然我知道如何以编程方式切换选项卡,但它不会将活动选项卡置于前台。我不能总是说出在SauceLabs上进行的E2E测试中发生了什么,因为当我查看屏幕投射时,它显示的是我离开的选项卡,而不是活动的选项卡。 我会错误地解决吗? 问题答案: 您可以尝试以下方法: 切换到新打开的标签页。 关闭当前窗口(在本例中为新选项卡)。 切

  • 因此,我今天的梁工作以以下警告结束: /usr/local/lib/python2。7/dist包/apache_-beam/runners/dataflow/dataflow_-runner。py:800:BeamDeprecationWarning:自第一个稳定版本以来,选项已被弃用。提及。选项将不受支持 所以据我所知,与其这样做: 我将不得不谈到这一点: 但有一个问题,很多选项不再可用,例如

  • 我需要在SE环境中使用没有CDI容器的Jersey 2.28(带Jetty)。我的所有设置都在web.xml中: 以下是我使用的依赖项: 我得到的是: 我知道Jersey可以与不同的DI容器一起使用,例如Weld、HK2等,但是否可以不使用DI容器?如果是,那又是怎样做的呢?

  • 在VScode中,我既不能安装linter也不能安装autopep8 formatter,我一直收到相同的错误消息,说没有针对该环境的pip 我有Python v. 3.8.5,并在VScode设置(/usr/local/bin/python3.8)中正确设置了路径。我选择Python v. 3.8.5作为我的解释器 问题可能是这样的: 我尝试过几次这样安装pip 当我检查pip -V时,它说 即