什么是Hibernate相当于“从DUAL中选择1”?

时间:2011-10-21 03:55:30

标签: sql hibernate select hql

什么是最小的Hibernate查询? Hibernate是否有相当于“从DUAL中选择1”的内容?

我正在编写一个healthcheck函数,并希望执行一个最小的查询,但是使用HQL来保持代码的可移植性(而不是使用本机查询)。

5 个答案:

答案 0 :(得分:4)

Hibernate's dialects是转换为各种数据库的内容,并且方言中没有“健康检查”或“验证”查询支持。这种事情通常由连接池完成,而不是由Hibernate完成。例如,参见DBCP's validation query property

答案 1 :(得分:4)

SQL select 1 from DUAL;不是一个非常好的运行状况检查,您唯一看到的是服务器响应,它不会告诉数据本身是否健康。但是如果你想提出这样的问题,只需创建自己的模拟DUAL的数据实体,你就可以控制对象,并且你将保持对任何RDBMS的通用性。

这样的东西
@Entity
@Table(name="myDual")
public class MyDual implements Serializable {

  @Id
  @Column(name = "id")
  Integer id;

  public Integer getId() {
    return id;
  }

  public void setId(Integer id) {
    this.id = id;
  }

}

不要忘记使用CacheMode.IGNORECacheMode.REFRESH来强制进行查询。否则你可能会检查缓存而不是数据库...

答案 2 :(得分:3)

动态本机SQL查询将适用于它。 例如 - session.createSQLQuery("Select 1 from dual").uniqueResult();

您也可以使用现有的表格进行查询,例如

session.createQuery("select 1 from existingTable").setMaxResults(1).uniqueResult();

答案 3 :(得分:2)

对于本机查询和DUAL表映射问题,需要使用hibernate创建查询

alias php="/Applications/XAMPP/bin/php"

而不是

session.createSQLQuery("SELECT 1 from DUAL") 

答案 4 :(得分:1)

嗯,为了便携性,来自dual的select 1不会移植到某些DB,因为它们没有双重。 ANSI标准的information_schema视图是一个选项,但是再次没有保证你可能使用的所有可能的数据库都有它们 - 但可能更好。