【问题标题】:Is it possible to delete a foreign key using @DeleteMapping in java spring hibernate?是否可以在java spring hibernate中使用@DeleteMapping删除外键?
【发布时间】:2021-07-22 07:43:59
【问题描述】:

换句话说,在单击时将其更改为 null。我这样做的原因是我有一个主要员工列表和分配给一个项目的员工。我想找出一种方法来从项目列表中删除员工,而不会将他们从主要的总员工列表中删除。

例如,这会从主列表中删除员工。

    @DeleteMapping("/jpa/users/{username}/employees/{employeeId}")
    public ResponseEntity<Void> deleteEmployee(
            @PathVariable String username, @PathVariable Long employeeId) {

        employeeJpaRepository.deleteById(employeeId);

        return ResponseEntity.noContent().build();
    }

但是如何删除@DeleteMapping("/jpa/users/{username}/projects/{projectId}/employees/{employeeId}") 的外键(projectId)?

【问题讨论】:

  • 如果你的映射是正确的,你应该能够从项目的 Java 对象属性中删除项目(我假设是一个集合),然后更新实体以保持更改

标签: java spring hibernate hibernate-mapping


【解决方案1】:

从集合中删除员工,如下所示:

@DeleteMapping("/jpa/users/{username}/employees/{employeeId}")
public ResponseEntity<Void> deleteEmployee(
        @PathVariable String username, @PathVariable Long employeeId) {
    User u = userJpaRepository.findByUsername(username);
    u.getEmployees().removeIf(e -> e.getId().equals(employeeId));
    userJpaRepository.save(u);

    return ResponseEntity.noContent().build();
}

【讨论】:

  • u.getEmployees() 将从数据库中获取所有员工。我们应该避免这种情况
  • 在这种情况下,您可能应该考虑将连接表映射为实体
【解决方案2】:

您可以在 EmployeeRepository 中进行单个查询,如下所示,以有效地删除记录。如果请求中包含无效的用户名和employeeId 组合,它将不会执行我们通常想要的任何操作。

@Modifying
@Query(value = "delete from Employee e where e.id = :empId and e.user_id= (select id from User u where u.username = :username) ")
void deleteEmployee(Long empId, String username);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-15
    • 2015-03-31
    • 1970-01-01
    • 1970-01-01
    • 2017-09-30
    • 1970-01-01
    • 1970-01-01
    • 2011-11-27
    相关资源
    最近更新 更多