Department和Employee之间是双向的一对多关系。
@Setter
@Getter
@Entity
@Table(name = "t_department")
public class Department {
@Id
private String id;
private String name;
@OneToMany(mappedBy = "department",fetch = FetchType.EAGER,cascade = CascadeType.ALL)
private List<Employee> employees;
}
@Setter
@Getter
@Entity
@Table(name = "t_employee")
public class Employee {
@Id
private String id;
private String name;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "dept_id")
private Department department;
}
@Repository
public interface EmployeeRepository extends JpaRepository<Employee, String> {
}
在数据库中,我有那些记录。
t_department:
+----+------------+
| id | name |
+----+------------+
| 2 | accounting |
| 3 | logistics |
+----+------------+
t_employee:
+----+------+---------+
| id | name | dept_id |
+----+------+---------+
| 3 | Tom | 2 |
| 4 | Tina | 3 |
+----+------+---------+
当我试图删除一个 Employee(id="3") 时,
@Test
@Transactional
public void should_delete_employee_success_when_delete_employee_given_a_exist_employee_id_in_DB() {
employeeRepository.delete("3");
}
但在控制台中,它只打印了 2 条 select 语句而没有删除:
Hibernate: select employee0_.id as id1_2_0_, employee0_.dept_id as dept_id3_2_0_, employee0_.name as name2_2_0_, department1_.id as id1_1_1_, department1_.name as name2_1_1_ from t_employee employee0_ left outer join t_department department1_ on employee0_.dept_id=department1_.id where employee0_.id=?
Hibernate: select employees0_.dept_id as dept_id3_2_0_, employees0_.id as id1_2_0_, employees0_.id as id1_2_1_, employees0_.dept_id as dept_id3_2_1_, employees0_.name as name2_2_1_ from t_employee employees0_ where employees0_.dept_id=?
然后我去看了数据库,什么都没做。
spring-data-jpa 是如何工作的?我困惑了好几天。
提前感谢您的回答。
最佳答案
CrudRepository
有方法 delete(<entity>)
和 deleteById()
.您应该使用 deleteById 而不是实体。
关于java - 如何删除 spring-data-jpa 中多边的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58641013/