Ищете HQL-конструктор (Hibernate Query Language) - PullRequest
7 голосов
/ 11 сентября 2008

Я ищу конструктор для HQL в Java. Я хочу избавиться от таких вещей, как:

StringBuilder builder = new StringBuilder()
    .append("select stock from ")
    .append( Stock.class.getName() )
    .append( " as stock where stock.id = ")
    .append( id );

Я бы предпочел что-то вроде:

HqlBuilder builder = new HqlBuilder()
    .select( "stock" )
    .from( Stock.class.getName() ).as( "stock" )
    .where( "stock.id" ).equals( id );

Я немного погуглил и не смог найти.

Я написал быстрый и тупой HqlBuilder, который в настоящее время соответствует моим потребностям, но я бы хотел найти тот, у которого будет больше пользователей и тестов, чем у меня одного.

Примечание: я хотел бы иметь возможность делать такие вещи и многое другое, чего я не смог сделать с Criteria API:

select stock
from com.something.Stock as stock, com.something.Bonus as bonus
where stock.someValue = bonus.id

т. выберите все акции, чье свойство someValue указывает на любой бонус из таблицы бонусов.

Спасибо!

Ответы [ 11 ]

0 голосов
/ 09 июля 2013

Теперь также доступны стандартный JPA Type Safe запрос и менее стандартный, но также хороший Object Query

Примеры:

JPA Тип Сейф

EntityManager em = ...
CriteriaBuilder qb = em.getCriteriaBuilder();
CriteriaQuery<Stock> c = qb.createQuery(Stock.class);
Root<Stock> = c.from(Stock.class);
Predicate condition = qb.eq(p.get(Stock_.id), id);
c.where(condition);
TypedQuery<Stock> q = em.createQuery(c); 
List<Stock> result = q.getResultList();

Запрос объекта

EntityManager em = ...
ObjectQuery<Stock> query = new GenericObjectQuery<Stock>(Stock.class);
Stock toSearch = query.target();
query.eq(toSearch.getId(),id);
List<Stock> res = (List<Stock>)JPAObjectQuery.execute(query, em);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...