Я хочу узнать, почему я не могу получить результаты - PullRequest
0 голосов
/ 13 июня 2019

Я просмотрел код, который кто-то написал, потому что не могу получить результат. код неверен, но, по крайней мере, я ожидаю, что 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);
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...