Как достать объект через hibernate по его полю, а не по id?

226
24 мая 2018, 13:50

Собственно мне нужно вытащить автора книг по его имени а не по id

@Override
    @Transactional
    public Author getAuthorById(int id) {
        Session session = sessionFactory.getCurrentSession();
        Author author = session.get(Author.class, id);
        logger.info("Class load: " + author);
        return author;
    }

Как это сделать?
Слышал про createCriteria, но он deprecated.

Answer 1

Есть два способа - c помощью запроса на JPQL и с помощью Criteria API. Объявлена устаревшей специфическая для Hibernate версия Criteria API, а новая версия, соответствующая JPA, вполне применима.

Вариант на JPQL:

Query query = session.createQuery("from Author where name = :name");
query.setParameter("name", "Howard Phillips Lovecraft");
Author author = query.getSingleResult();

Вариант на Criteria API:

CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<Author> criteria = builder.createQuery(Author.class);
Root<Author> root = criteria.from(Author.class);
ParameterExpression<String> nameParam = builder.parameter(String.class);
criteria.select(root)
        .where(builder.equal(root.get("name"), nameParam));
Query<Author> query = session.createQuery(criteria);
query.setParameter(nameParam, "Howard Phillips Lovecraft");
Author author = query.getSingleResult();
Answer 2

Вам надо использовать createQuery(), что в свою очередь предпологает использование HQL.

Session session = sessionFactory.getCurrentSession();
String queryString = "from Author where " + name + "= :value";
Query queryObject = session.createQuery(queryString);
queryObject.setParameter("value", value);
List<Author> list = queryObject.list();

где name это название поля, содержажего имя, а имя содержится в переменной value.

READ ALSO
Регулярное выражение с оператором OR

Регулярное выражение с оператором OR

Мне нужно найти с помощью регвыражения строки, которые удовлетворяют сразу все следующие условия:

189
Сортировка слов по алфавиту не понимает украинские буквы

Сортировка слов по алфавиту не понимает украинские буквы

Есть список слов в словаре, его надо отсортировать, и как бы все работает, но буквы є, і, ґ выходят в самом концеМожно ли это как-то исправить...

224
Получение sms в фоновом режиме (когда приложение закрыто) на смартфоне с версией android 7.1 SDK 8.1 oreo (API 26)

Получение sms в фоновом режиме (когда приложение закрыто) на смартфоне с версией android 7.1 SDK 8.1 oreo (API 26)

Подскажите пожалуйста, написал приложение которое может получать sms в фоновом режимеНа смартфоне с android 5

213
Как сделать такой BottomSheet с отступами и закругленными углами?

Как сделать такой BottomSheet с отступами и закругленными углами?

Не получается сделать чтобы были отступы

207