在哪些情况下我们使用本机查询和hql查询?

Z.U*_*U.H 8 java hibernate

我的问题是我不明白我怎么知道我必须使用Native查询而不是hibernate查询语言?

Mik*_*nov 1

至少有两个例子表明您无法使用 HQL,而必须使用本机。

1) Hibernate 通常不适合在运行时执行 DDL 类型操作:

em.createNativeQuery("DROP TABLE IF EXISTS mytable").executeUpdate();
Run Code Online (Sandbox Code Playgroud)

2)我在这一点上可能是错的,但据我所知,HQL 查询通常看起来像"from MyClass as mc". 这意味着您必须在那里有一个类的字符串化名称,有时您必须在运行时确定类。反过来,这会将你的 HQL 转换成类似hql = "from " + obj.getSimpleName() + " sn";. 对于这种“多态”查询,以下内容会更清晰:

em.createNativeQuery(someSql, getConcreteClass());
Run Code Online (Sandbox Code Playgroud)