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

使用nativeJPQL删除查询时出现异常

李兴为
2023-03-14
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;
    
 @Modifying
 @Query(value = "DELETE FROM departement_employes WHERE employes_id = :id ", nativeQuery = true)
 void deleteEmployerDepartementsAssociations(@Param("id") int id );
 

员工与部门之间的关联是多对多的双向关联。

我正在尝试在删除受雇者之前删除关联

共有1个答案

胡飞舟
2023-03-14

尝试以以下方式更正您的查询:

@Modifying
@Query(value = "DELETE FROM departement_employes WHERE employes_id = :id ", nativeQuery = true)
void deleteEmployerDepartementsAssociations(@Param("id") int id );

您必须在事务中包装任何数据库修改操作。看看这篇文章的例子。

因此,作为一种可能的方法,您可以通过@transactional注释来注释您的服务方法:

@Override
@Transactional
public void deleteEmployerById(int id) {
   // ...
}
 类似资料:
  • 我使用包对MySQL服务器运行查询 以下是连接设置 它适用于所有查询,只有查询有26个参数: 我一直收到以下错误消息: C:\myprojects\tms\node_modules\mysql2\lib\commands\commands.js:30 this.onresult(err);^ TypeError:this.onresult不是Connection.Query.Execute(C:\

  • 如果我通过“.ASC”删除组的第二部分,但当我这样做时,数据是不正确的。它为什么要这样做,我如何修复它,并且仍然按照表1分组,除了表3之外,还要先按表1分组。 先进的谢谢! 我有时间接受完整的查询,并将表拉到一个通用表单,以便在没有客户端数据的情况下发布。我能够将模式添加到sqlfiddle中,但如果没有我使用的数据,结果可能会有所不同,而且由于字符的限制,我甚至无法将表前的100行(共7行)放入

  • 我正在尝试使用连接获取运行查询,但我也在使用DTO投影来提高性能,但我得到了以下异常: org.hibernate.QueryException:查询指定的联接获取,但获取的关联的所有者不存在于选择列表中[FromElement{显式,不是集合联接,获取联接,获取非惰性属性,类Alias=pi,角色=returnitRest。Ereturn.productItems, tableName=prod

  • 问题内容: 有人可以帮助我了解此查询的问题吗: 问题答案: 之所以无法使用,是因为MySQL不按照您尝试的方式在delete语句中支持连接语法。 使用: …或使用EXISTS:

  • 我不确定是什么导致了这个例外。

  • 摘自:https://docs.microsoft.com/en-us/azure/cosmos-db/create-graph-dotnet 我在 .wait() 部分遇到异常: 代码: