К сожалению, AFAIK, это невозможно с этим запросом. Это возможно с помощью следующего уродливого запроса:
select author from Author author
where author.id in (select author2.id from Book book
join book.authors as author2
where book.name like :bookName)
Для такого простого, не динамически составленного запроса я бы придерживался вашего запроса HQL Если вам действительно нужно использовать Критерии, то это соответствующий код:
Criteria c = session.createCriteria(Author.class, "author");
DetachedCriteria dc = DetachedCriteria.forClass(Book.class, "book");
dc.createAlias("book.authors", "author2");
dc.add(Restrictions.like("book.name", bookName));
dc.setProjection(Projections.property("author.id"));
c.add(Subqueries.propertyIn("author.id", dc);
List<Author> authors = (List<Author>) c.list();