Spring Hibernate事件侦听器不';截取HQL执行更新

Spring Hibernate事件侦听器不';截取HQL执行更新,spring,hibernate,jpa,Spring,Hibernate,Jpa,我发现Hibernate的EventListeners和Interceptors interceptHQL executeUpdate 2011年在Hibernate论坛上创建了一个类似的线程,但没有给出解决方案: 从那时起许多年过去了。如果我想拦截来自HQL执行的DB更新/插入,那么解决方案是什么 Query logicalDeleteQuery = session.createQuery( "update Request set activeFlag = 'N', " +

我发现Hibernate的
EventListener
s和
Interceptor
s interceptHQL executeUpdate

2011年在Hibernate论坛上创建了一个类似的线程,但没有给出解决方案:

从那时起许多年过去了。如果我想拦截来自HQL执行的DB更新/插入,那么解决方案是什么

Query logicalDeleteQuery = session.createQuery(
        "update Request set activeFlag = 'N', " +
        " lastChangedById = :lastChangedById, lastChangedDate = :lastChangedDate " + 
        " where  " +
        " id = :id  ");
//...Set parameters...
logicalDeleteQuery.executeUpdate();

您不能在此处通过实体模型。您正在通过查询直接进行修改。没有实体侦听器或拦截器可以帮上忙。但是如果我错了,请纠正我,查询仍然通过Hibernate的通道?我不是在做直接SQL。Hibernate必须以某种方式处理我的HQL。Hibernate直接将HQL转换为SQL。而不是检测实体上的更新并从中推断SQL。侦听器和侦听器是JPA
EntityManager
中实体生命周期的一部分。当使用HQL或SQL时,您完全跳过了它。谢谢。是否可以实现我自己的
查询
并覆盖
执行更新
以允许拦截?如果是这样,有没有办法告诉Hibernate(可能是通过配置):每当我执行
session.createQuery()
->时,给我自定义
MyQuery
实现,并使用该
executeUpdate
覆盖?基本上,我在考虑如何在不使用实体生命周期的情况下破解拦截。这绝对不可能吗?这听起来像是个XY问题。你能描述一下你想解决的实际问题吗?