什么是最小的Hibernate查询? Hibernate是否有相当于“从DUAL中选择1”的内容?
我正在编写一个healthcheck函数,并希望执行一个最小的查询,但是使用HQL来保持代码的可移植性(而不是使用本机查询)。
答案 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.IGNORE
或CacheMode.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视图是一个选项,但是再次没有保证你可能使用的所有可能的数据库都有它们 - 但可能更好。