例如:
EXISTS ( SELECT * FROM [table] WHERE ... )
Run Code Online (Sandbox Code Playgroud)
如何使用Hibernate进行此类查询?
sto*_*ito 13
HQL不允许使用exists语句.但是你可以使用几种方法:
boolean exists = session.createQuery("select 1 from PersistentEntity where exists (select 1 from PersistentEntity p where ...)").uniqueResult() != null;但这对性能有害当你可以使用EXISTS时避免在SQL中使用COUNT()count(*) > 0但这将迫使Hibernate加载所有字段并对对象进行水合,但您只需要检查null.boolean exists = session.createQuery("from PersistentEntity where ...").setMaxResults(1).uniqueResult() != null;,如果你启用了二级缓存,这将更快地工作,但如果你需要更多的批评,那将是一个问题session.get(PersistentEntity.class, id) != null.iduse*_*and 12
如果你的目标是检查一些关于空虚的设置,你可以使用简单的HQL查询:
boolean exists = (Long) session.createQuery("select count(*) from PersistentEntity where ...").uniqueResult() > 0
Run Code Online (Sandbox Code Playgroud)
如果我们使用WHERE子句,数据库可能必须扫描整个表来计算符合我们标准的记录,但是我们可以限制只搜索一条记录,这足以说明空虚.
如果没有任何搜索过滤器,则可以接受先前的查询,因为数据库将使用索引进行一些优化.
所以我认为以下查询将增加一些性能与前一个相比:
boolean exists = session.createQuery("from PersistentEntity where ...").setMaxResults(1).uniqueResult() != null;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25223 次 |
| 最近记录: |