2014-01-31 5 views
2

Преимущества ORM в том, что я могу сопоставлять таблицы базы данных с объектами Java. Если я использую HQL для написания пользовательских инструкций, тогда в чем смысл? Я также могу написать обычные SQL-запросы и использовать ResultSets?Каковы преимущества использования HQL?

+2

SQL извлекает строки. HQL извлекает entites/objects, выполняя всю работу за вас. –

+0

Если я пишу свой собственный HQL и извлекаю столбец, который является результатом вычисления: 'table.a column.a - table.b column.b', то у меня есть столбец, который нельзя сопоставить, потому что это настраиваемый результат? – ThreaT

+0

В зависимости от результата операции Hibernate сопоставляет его некоторому подтипу 'Object', возможно,' Integer' или 'Long'. –

ответ

1

Ну, в основном потому, что иногда невозможно (или очень сложно) писать запросы, используя другие альтернативы. Затем вам нужно вернуться к альтернативе HQL.

У HQL есть, как недостаток, тот факт, что вы записываете строки с ним. Поэтому рекомендуется использовать другие стратегии. Но иногда это самый быстрый способ его реализации.

Я также хотел бы сказать вам, чтобы прочитать этот пост, который широко обсуждался о HQL уже: JPA and Hibernate - Criteria vs. JPQL or HQL

0

HQL является единственной альтернативой выйти из мало-мальски Performace оставил в спящий режим.

Если у вас большой стол со многими строками, и все, что вам нужно, это идентификатор и описание, то вам лучше с hql. Вы можете заполнить pojo информацией о двух столбцах, и если вы используете hibernate 4, у вас есть своего рода тип safty.

запрос:

final TypedQuery<Pojo> query = em.createQuery(new StringBuilder() 
.append("SELECT new ").append(Pojo.class.getName()) 
.append("(tbl.id, tbl.desc) FROM ") 
.append(BigTable.class.getName()).append(" tbl ") 
.append("WHERE tbl.id between :start and :end ") 
.toString(), 
Pojo.class 
); 

List<Pojo> list = query.getResultList(); 
Смежные вопросы