【发布时间】:2021-04-04 00:04:50
【问题描述】:
我尝试使用 nativeQuery 删除,但我有这个异常:
org.springframework.dao.InvalidDataAccessApiUsageException: Executing an update/delete query; nested exception is javax.persistence.TransactionRequiredException: Executing an update/delete query
at org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:403)
...................
Caused by: javax.persistence.TransactionRequiredException: Executing an update/delete query
at org.hibernate.internal.AbstractSharedSessionContract.checkTransactionNeededForUpdateOperation(AbstractSharedSessionContract.java:413)
at org.hibernate.query.internal.AbstractProducedQuery.executeUpdate(AbstractProducedQuery.java:1668)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
...............
我的员工实体:
@Entity
public class Employe implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String prenom;
private String nom;
private String email;
private int isActif;
@Enumerated(EnumType.STRING)
private Role role;
@OneToOne(mappedBy ="employe", cascade = CascadeType.REMOVE)
Contrat contrat;
@ManyToMany( mappedBy="employes", fetch= FetchType.EAGER , cascade = {CascadeType.PERSIST })
private List<Departement> departements;
@ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE ,CascadeType.REMOVE})
List<Mission> missions;
.........
我的部门实体:
@Entity
public class Departement implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
@ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE} )
private Entreprise entreprise;
@OneToMany( mappedBy="departement", cascade = {CascadeType.PERSIST, CascadeType.MERGE})
private List<Mission> missions;
@ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.PERSIST, CascadeType.MERGE})
private List<Employe> employes;
我的服务:
@Autowired IEmployeRepository empRep; …… @覆盖 公共无效 deleteEmployerById(int id) { 雇员 e = empRep.findById(id).orElse(null); // 删除该作者的所有关联 empRep.deleteEmployerDepartementsAssociations(id); empRep.delete(e); }
我的 EmployeRepository:
@Repository
公共接口 IEmployeRepository 扩展 CrudRepository
@Modifying
@Query(value = "DELETE FROM departement_employes WHERE employes_id = :id ", nativeQuery = true)
void deleteEmployerDepartementsAssociations(@Param("id") int id );
}
只有删除查询不起作用,我正在尝试删除与某个员工关联的所有部门。
员工与部门的关联是多对多双向关联。
我正在尝试在删除员工之前删除关联
【问题讨论】:
标签: spring hibernate spring-data-jpa