我想利用 Criteria API 的 db 独立 HQL 和类型安全性。但我没有实体类。
我可以直接使用 Criteria API 吗?
我想利用 Criteria API 的 db 独立 HQL 和类型安全性。但我没有实体类。
我可以直接使用 Criteria API 吗?
不,你不能。HQL 和 Criteria API 的重点是根据实体和它们之间的关联来查询对象模型。
首先,很高兴注意到 Criteria API 通常用于替代 HQL 来构建动态查询(“ HQL 非常强大,但一些开发人员更喜欢使用面向对象的 API 动态构建查询,而不是构建查询字符串”参考链接) .
其次,Hibernate 是一个对象/关系(数据库)持久化实现。为了使用它,我们需要定义其对象应映射到目标数据库表(实体)的类。
对于使用域类为 Hibernate 会话获取 Criteria API:
Criteria crit = sess.createCriteria(Cat.class);
crit.setMaxResults(50);
List cats = crit.list();
Session 对象使用从“Cat”类到其对应表(可能在数据库中命名为“Cat”)的映射。
因此,最终没有实体类及其映射,没有 Session 对象。并且没有 Session ,没有 Criteria 对象。
Criteria 需要知道需要查询的 Classes (Cat.class)。
你怎么能告诉hibernate你想应用哪个类?
所以你必须在 createcriteria(Entity.class) 中传递实体类名。
而且你... Criteria 提供了丰富的功能,这将减少你的代码。
但请注意……所有事物都有正面 - 负面的意义。
标准也有一些负面影响......
所以..小心。根据您的应用程序相关规范使用