Sobes.tech
Middle

Фарқи байни JPQL ва HQL чист?

sobes.tech AI

Ҷавоб аз AI

JPQL (Java Persistence Query Language) — забонҳои стандартӣ барои саволҳои Java Persistence API (JPA). HQL (Hibernate Query Language) — забони махсуси саволҳо барои рамзи Hibernate.

Фарқиятҳои асосӣ:

  • Стандартизатсия: JPQL қисми стандарти JPA аст, HQL махсус барои Hibernate.
  • Дастгирии функсияҳо: HQL метавонад функсияҳо ва имкониятҳои махсуси Hibernate-ро дар бар гирад, ки дар JPQL намебошанд (масалан, criteria.setResultTransformer).
  • Камаронӣ: Дар аксар ҳолатҳо, иҷроиш баробар аст, зеро ҳарду забон ба SQL тарҷума мешаванд. Аммо, баъзе оптимизатсияҳо метавонанд махсус барои иҷроиш (Hibernate дар HQL) бошанд.
  • Трансферпазирӣ: JPQL бештар дар байни иҷроишҳои гуногуни JPA (Hibernate, EclipseLink, OpenJPA) интиқолпазир аст, дар ҳоле ки HQL ба Hibernate маҳдуд аст.

Масалан, дар ҳарду забон як саволи оддӣ:

// JPQL
SELECT p FROM Product p WHERE p.price > 100

// HQL
SELECT p FROM Product p WHERE p.price > 100

Ҳатто агар синтакси саволҳои оддӣ одатан якхела бошад, дар сценарияҳои мураккаб HQL метавонад имкониятҳои иловагӣ пешниҳод кунад, ки дар стандарти JPQL пешбинӣ нашудаанд. Барои таъмини бештар интиқолпазирии барнома байни таъминкунандагони гуногуни JPA тавсия дода мешавад, ки аз JPQL истифода шавад.