quarkus 执行查询时对所有对象增加固定查询条件 继承EmptyInterceptor的一个完整demo
时间: 2024-01-01 14:04:22 浏览: 24
好的,我们可以继承 `EmptyInterceptor` 类来实现对所有对象查询时增加固定查询条件的功能。下面是一个完整的 Demo。
首先,定义一个 `QueryInterceptor` 类,继承 `EmptyInterceptor`,并实现 `onPrepareQuery` 方法:
```java
public class QueryInterceptor extends EmptyInterceptor {
@Override
public String onPrepareQuery(String sql) {
return sql + " WHERE status = 'active'";
}
}
```
这里我们在 SQL 语句后面加上了一个固定的 WHERE 条件,即状态为 active 的记录。
然后,在应用启动时,将该拦截器注册到 Hibernate 的配置中:
```java
@Singleton
public class HibernateConfig {
@Produces
public EntityManagerFactory entityManagerFactory() {
Map<String, Object> properties = new HashMap<>();
// 添加拦截器
properties.put("hibernate.session_factory.interceptor", new QueryInterceptor());
return Persistence.createEntityManagerFactory("myPersistenceUnit", properties);
}
}
```
这里我们在 `properties` 中添加了一个键值对,键为 `hibernate.session_factory.interceptor`,值为我们定义的 `QueryInterceptor` 实例。
现在,我们可以像往常一样执行查询操作,而拦截器会自动在 SQL 语句后面加上固定的 WHERE 条件:
```java
@Inject
EntityManager entityManager;
List<User> users = entityManager.createQuery("SELECT u FROM User u", User.class).getResultList();
```
这样,查询结果将会加上一个固定条件,即状态为 active 的记录。