gpt4 book ai didi

java - Spring Hibernate 可以拦截查询吗?

转载 作者:太空宇宙 更新时间:2023-11-03 11:28:48 25 4
gpt4 key购买 nike

我正在开发一个应用程序,我需要拦截所有的 sql 查询,并在每个查询后添加类似“WHERE customer_id={id}”的内容,这样我就不必在每次使用查询时都添加该子句。

有没有办法在每个查询发送到数据库之前对其进行过滤?

最佳答案

是的,hibernate 提供了 EmptyInterceptor 类,我们必须扩展这个类并覆盖所有方法。在执行此步骤之前,我们必须将我们的拦截器注册到 hibernate session 。

 // Logging Interceptor..
public class LoggingInterceptor extends EmptyInterceptor {

private static final long serialVersionUID = 1L;
// Define a static logger
private static Logger logger = LogManager.getLogger(LoggingInterceptor.class);

// 1) save
@Override
public boolean onSave(Object entity, Serializable id, Object[] state,
String[] propertyNames, Type[] types)
{
logger.info("onSave method is called.");
System.out.println("LoggingInterceptor . onSave() before save this method is called.");
if (entity instanceof Book) {
Book book = (Book) entity;
logger.info(book.toString());
}
return super.onSave(entity, id, state, propertyNames, types);
}

2) 向 hibernate session 注册我们的 LoggingInterceptor 以监控所有操作。

 public class MainApp {

public static void main(String[] args) {

Session session = null;
Transaction transaction = null;
try {
session = HibernateUtil.getSessionFactory()
.withOptions()
.interceptor(new LoggingInterceptor()) // add Logging_interceptor to Session
.openSession();

transaction = session.getTransaction();
transaction.begin();

}

关于java - Spring Hibernate 可以拦截查询吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51779925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com