Собственно мне нужно вытащить автора книг по его имени а не по 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.
Есть два способа - 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();
Вам надо использовать 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.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости