Если я правильно понял ваш вопрос, вам нужно будет использовать Критерии гибернации, чтобы определить, имеет ли возвращенный Resultset
более 2500 строк.Это может быть достигнуто путем получения списка из Criteria
и последующего определения размера списка.Например, скажем, вы запрашиваете таблицу заказов на покупку:
public static List<PurchaseOrders> getPurchaseOrderDetails() {
List<PurchaseOrders> orders = null;
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
Criteria cr = session.createCriteria(PurchaseOrders.class);
cr.add(Restrictions.eq("delFlg", "N"));
////add whatever other filters here
orders = cr.list();
tx.commit();
} catch (HibernateException asd) {
log.debug(asd.getMessage());
if (tx != null) {
tx.rollback();
}
} finally {
session.close();
}
return orders;
}
Это эквивалентно:
select * from purchase_orders where del_flg = 'N';
Обратите внимание, что PurchaseOrders
- это ваш класс jpa
, имеющий базу данныхсопоставление объектов.Поскольку у вас уже есть список здесь, вы всегда можете проверить его размер.
public static void sendAlert() {
List<PurchaseOrders> orders = getPurchaseOrderDetails();
int size = orders.size();
if(size > 2500){
///Initiate alerts
}
}
Надеюсь, это поможет.
ОБНОВЛЕНИЕ Если вам нужно покрыть все своизапросы в одном методе, вам нужно написать общий метод:
public static <T> List<T> getDetails(Class<T> c, Map<String, ?> params) {
List<T> details = null;
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
Criteria cr = session.createCriteria(c);
params.entrySet().forEach((entry) -> {
cr.add(Restrictions.eq(entry.getKey(), entry.getValue()));
});
details = cr.list();
tx.commit();
} catch (HibernateException asd) {
log.debug(asd.getMessage());
if (tx != null) {
tx.rollback();
}
} finally {
session.close();
}
return details;
}
, а затем заполнить параметры для ваших различных запросов и таблиц.