Вовремя code review возник конфликт как правильнее сделать запрос. Решили спросить 3-ю сторону.
Запрос состоит из нескольких Entity. некоторые из которых являються условием.
предложение номер 1: загрузить сначала Entity для условий, a потом подать их во второй запрос.
public ProviderMapped findByProviderId(final String providerId) {
Criteria c = getSession().createCriteria(ProviderMapped.class);
c.setCacheable(true);
c.add(Restrictions.eq("providerId", providerId));
return (ProviderMapped) c.uniqueResult();
}
public Collection<BusinessRuleAppliedMarginByClientMarginClassMapped> findAllByProvider(final ProviderMapped provider) {
Criteria criteria = getSession().createCriteria(getPersistentClass());
criteria.add(Restrictions.eq("provider", provider));
return criteria.list();
}
предложение номер 2: сделать все в 1 query.
public Collection<BusinessRuleAppliedMarginByClientMarginClassMapped> findAllByProvider(Providerid providerId) {
Criteria criteria = getSession().createCriteria(getPersistentClass());
criteria.add(Restrictions.eq("provider.id", providerId.getId));
return criteria.list();
}
исходный код по максимум упрощен что бы не смушать нашей бизнес логикой.
Важное примечаение: если включить логи в hibernate то мы увидим что во втором случае hibernate все равно сделать два SQl запроса. providerMapped обычно кешируеться.
Вопрос! какие есть аргументы за и против?