在哪些情况下我们选择SQL,Hibernate查询语言和Criteria API的休眠?休眠SQL,HQL和Criteria API
2
A
回答
1
HQL - 这适用于大多数查询并且易于读写。
条件 - 如果你不想写查询,那么你可以使用Criteria API。 例如: -
SELECT * FROM employee WHERE emp_id =1
标准查询将被
Criteria criteria = session.createCriteria(Employee.class)
.add(Restrictions.eq("id", new Integer(1));
获取所有员工
List customers = criteria.list();
比其他API提供分页,最大行ID,子对象的选择等。
SQL - 其他两个API不适合您的工作,然后使用本机SQL。
1
标准的查询适合用于创建动态查询。 例如,动态添加某些排序或者根据参数的值保留一些部分(例如限制)更容易。
准则查询通过实例化表示查询元素的Java对象而不是字符串来定义。这样做的好处是可以在编译时检测错误。标准查询是类型安全的
HQL查询被定义为字符串,类似于SQL。对于静态和复杂查询,使用HQL,因为它更易于理解/阅读。
另外HQL不依赖于数据库的表。我们可以在HQL中使用实体名称,而不是表名。因此它可以用作数据库独立查询语言。
@Entity(name="MyEntityName") @Table(name="MyEntityTableName") class MyEntity { //A table with name MyEntityTableName is created and the entity name is MyEntityName. //Your JPQL/HQL query would be : select * from MyEntityName
这两个允许你去耦SQL应用程序。 SQL语法可能因数据库供应商(Oracle,MySQL等)而异。因此,如果您想更改底层数据库,不会有任何影响(或影响最小)
可能有供应商特定的优化SQL功能,您可以利用它们,但它们不符合ANSI标准。像Hibernate这样的ORM工具负责处理它们,同时提供优化的解决方案。
SQL查询使用JDBC有点比标准查询和HQL更快。但是这种性能下降对获得的好处非常值得。
希望这会有所帮助。
相关问题
- 1. 休眠HQL和setMaxResults
- 2. 休眠HQL getMaxVersion
- 3. GROUP_CONCAT休眠HQL
- 4. 休眠(HQL)
- 5. 休眠HQL和日期
- 6. 休眠,取,HQL和hashCode()
- 7. 休眠,地图和HQL
- 8. 休眠,使用Criteria或HQL返回自定义对象
- 9. 休眠HQL查询
- 10. 休眠:使用HQL
- 11. 加入休眠HQL
- 12. 从HQL/Criteria API使用CONTAINS
- 13. 休眠HQL到标准
- 14. 在HQL(休眠)中转换SQL查询
- 15. 集团在休眠错误和HQL
- 16. 休眠HQL查找参数和条件
- 17. 休眠 - 一级缓存和HQL
- 18. 休眠HQL和分组提取
- 19. 休眠删除使用HQL
- 20. 提取* HQL *在休眠
- 21. 问题像在休眠hql
- 22. 休眠HQL左的连接
- 23. 休眠HQL连接错误
- 24. HQL休眠很多表
- 25. 休眠HQL:多对多
- 26. 则DateDiff在HQL - 休眠
- 27. 休眠HQL的时间差
- 28. 休眠HQL或条件
- 29. Log4j和休眠sql
- 30. 使用Criteria休眠一对多搜索
标准的问题是当您在代码中的某个地方出现问题时,非常大的查询。在Criteria中,你不知道你的查询是什么,并且需要一步一步地找出问题,因此建议在构建非常大的动态查询时使用带有StringBuilder的SQL。 –