Named Query or Native Query or Query 从性能角度看哪个更好?

新手上路,请多包涵

以下哪一个更好(EJB 3 JPA)

//询问

一个)。 getEntityManager().createQuery (“select o from User o”);

//命名查询,其中 findAllUser 在实体级别定义

b). getEntityManager().createNamedQuery (“User.findAllUser”);**

//本机查询

C)。 getEntityManager().createNativeQuery (“SELECT * FROM TBLMUSER”);

请解释一下哪种方法在哪种情况下更好?

原文由 Jekin Kalariya 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 528
2 个回答
  1. ### 创建查询()

它应该用于动态查询创建。

    //Example dynamic query
   StringBuilder builder = new StringBuilder("select e from Employee e");
   if (empName != null) {
       builder.append(" where e.name = ?");
   }
   getEntityManager().createQuery(builder.toString());

  1. ### 创建命名查询()

它就像一个常量变量,可以通过名称重复使用。您应该在常见的数据库调用中使用它,例如“查找所有用户”、“按 id 查找”等。

  1. ### createNativeQuery()

这将创建一个完全依赖于底层数据库的 SQL 脚本语言支持的查询。当需要复杂查询并且 JPQL 语法不支持时,它很有用。

但是,如果底层数据库从一个更改为另一个,它可能会影响您的应用程序并需要更多工作。一个例子是,如果您的开发环境是 MySQL,而您的生产环境是使用 Oracle。另外,如果有多个结果,返回的结果绑定可能会很复杂。

原文由 Wundwin Born 发布,翻译遵循 CC BY-SA 4.0 许可协议

简单答案: 1) createQuery() - 当您希望在运行时执行查询时。

2) createNamedQuery() - 当您想发送常见的数据库调用时,例如 findBy<attribute> , findAll ,..

3)createNativeQuery() - 当您希望查询特定于数据库供应商时使用。这就带来了 便携性 的挑战。

原文由 Karan Bhatia 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题