Я просмотрел код, который кто-то написал, потому что не могу получить результат. код неверен, но, по крайней мере, я ожидаю, что List<Language> langList = criteria.list()
вернет результаты из БД. Я получаю результат, когда запускаю сгенерированный SQL-запрос в той же БД или исправляю код следующим образом.
Я хочу узнать, почему не получают результат
неправильный код
public Language getLanguageByCode(String code) {
Criteria criteria = getSession().createCriteria(Language.class);
if (code.length() == 3)
criteria = criteria.add(Restrictions.eq("threeCode", code.toUpperCase()));
else if (code.length() == 2)
criteria = criteria.add(Restrictions.eq("twoCode", code.toUpperCase()));
else {
throw new RuntimeException("code incorrect");
}
criteria = criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
@SuppressWarnings("unchecked")
List<Language> langList = criteria.list();
Language lang = null;
if (langList.size() > 1) {
LOG.error("Query result size is bigger than expected!");
lang = (Language) criteria.list().get(0);
} else if (langList.size() == 1) {
criteria.setFirstResult(0);
criteria.setMaxResults(1);
lang = (Language) criteria.uniqueResult();
}
return lang;
}
Сгенерированный запрос Hibernate:
select
this_.id as id23_0_,
this_.three_code as three2_23_0_,
this_.title as title23_0_,
this_.two_code as two4_23_0_
from
language this_
where
this_.two_code=?
2019-06-12 16:12:15 TRACE BasicBinder:83 - binding parameter [1] as [VARCHAR] - EN
код правильный
public Language getLanguageByCode(String code) {
Criteria criteria = getSession().createCriteria(Language.class);
if (code.length() == 3)
criteria = criteria.add(Restrictions.eq("threeCode", code.toUpperCase()));
else if (code.length() == 2)
criteria = criteria.add(Restrictions.eq("twoCode", code.toUpperCase()));
else {
throw new RuntimeException("code incorrect");
}
criteria = criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
@SuppressWarnings("unchecked")
List<Language> langList = criteria.list();
if (langList.size() == 0)
return null;
if (langList.size() > 1)
LOG.error("Query result size is bigger than expected!");
return langList.get(0);
}