我有一个配置为使用Spring Data(@Repository)注释执行的Hibernate查询。我想在将查询提交给数据库之前捕获该查询,并在满足特定条件时对其进行一些修改。
这样做的最佳选择是什么?我更喜欢JPA解决方案而不是Hibernate解决方案,但是Hibernate解决方案也可以使用。
如果要在准备好的语句之后修改查询,可以将其放入Hibernate Interceptor中,并在Spring DB Configuration中进行注册。
您的MyInterceptor应该实现Hibernate Interceptor.class或扩展EmptyInterceptor.class。您正在寻找的方法是:
public String onPrepareStatement(String sql);
如果您还需要其他功能,可以尝试使用事件监听器,但是我不确定您的情况是否合适。
这里有一些文档:
Hibernate 4.0拦截器和事件如何将拦截器与Spring集成