Spring Hibernate事件侦听器不';截取HQL执行更新
我发现Hibernate的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', " +
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问题。你能描述一下你想解决的实际问题吗?