当前位置: 首页 > 知识库问答 >
问题:

Spring Data JPA删除查询

相化
2023-03-14

我正在尝试看看这是否是使用spring JPA编写删除查询的正确方法。我有一个表,主键为id,外键为study_id。我想基于study_id删除一行。我无法在JPA中仅使用delete方法,因为study_id不是唯一键。于是我写了新方法:

    @Modifying
    @Transactional
    @Query(value = "DELETE FROM MY_TABLE WHERE STUDY_ID = :studyId", nativeQuery = true)
    int deleteByStudyId(@Param("studyId") long studyId);

我从https://javadeveloperzone.com/spring-boot/-data-jpa-delete-query/#3_delete_operation_using_custom_query中找到了这一点。但是,我不确定为什么需要@transactional和nativequery来正确处理它。没有它们,我就会出错。我也想知道这是否是正确的方式从表中删除。这是可行的,但我对spring JPA非常陌生。

共有1个答案

魏安宁
2023-03-14

我不确定为什么需要@transactional和nativeQuery来正确处理它。

没有nativeQuery意味着您使用的是JPQL,那么您应该在实体中使用实体名和列名,而不是数据库表名或列

我也想知道这是否是正确的方式从表中删除。

我认为更简单的方法是这样使用JPA方法命名查询

Long deleteByStudyId(long studyId);
 类似资料:
  • 问题内容: 当我尝试从数据库中删除条目时,使用 然后我可以执行以下操作: 1)如果该行存在于数据库中,则将执行两个SQL查询:一个选择,然后一个删除 2)如果数据库中不存在该行,则仅执行选择查询 但是同样,更新不是这种情况。无论是否存在数据库行,都只会执行更新查询。 请让我知道为什么这种行为用于删除操作。这不是性能问题,因为遇到了两个查询而不是一个查询? 编辑: 我正在使用hibernate3.2

  • 以下示例将演示如何使用Delte查询,在DBUtils的帮助下删除记录。 我们将删除表中的一条记录。 语法 其中, deleteQuery − 删除包含占位符的查询。 queryRunner − 对象删除数据库中的员工对象。 为了理解上述与DBUtils相关的概念,我们编写一个将运行更新查询的示例。创建一个示例应用程序。 更新在DBUtils入门应用中创建的文件。 编译并运行应用程序,如下所述。

  • 问题内容: 当我尝试从数据库中删除条目时,使用 然后我可以执行以下操作: 1)如果该行存在于数据库中,则将执行两个SQL查询:一个选择,然后一个删除 2)如果数据库中不存在该行,则仅执行选择查询 但是同样,更新不是这种情况。无论是否存在数据库行,都只会执行更新查询。 请让我知道为什么这种行为用于删除操作。这不是性能问题,因为遇到了两个查询而不是一个查询? 编辑: 我正在使用休眠3.2.5 样例代码

  • 问题内容: 我试图使用没有结果的过滤查询删除一些子行: 我得到了错误。 全栈跟踪: 我无法找到问题所在。 任何想法? 问候 问题答案: 在查找您的异常发生的源之后,我建议尝试以下操作: 请参阅delete方法的文档以了解其含义。传递参数将基本上运行查询两次,一次为选择,一次为删除。 如果运行两个查询是不希望的,通过代替,然后调用立即删除后,以避免不一致的状态的内部存储。

  • 以下示例将演示如何在DBUtils的帮助下使用Delete查询删除记录。 我们将删除Employees Table中的记录。 语法 (Syntax) String deleteQuery = "DELETE FROM employees WHERE id=?"; int deletedRecords = queryRunner.delete(conn, deleteQuery, 33,104);

  • SpringDataJpa中 Specification怎样使用in查询 实体类Menu.java如下 想通过roles属性做in查询,代码如下 错误如下: Parameter value [com.appmtce.pojo.entity.role.Role@20f81e2a] did not match expected type [java.util.Collection (n/a)] 我的S