以下哪一个更好(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 许可协议
它应该用于动态查询创建。
它就像一个常量变量,可以通过名称重复使用。您应该在常见的数据库调用中使用它,例如“查找所有用户”、“按 id 查找”等。
这将创建一个完全依赖于底层数据库的 SQL 脚本语言支持的查询。当需要复杂查询并且 JPQL 语法不支持时,它很有用。
但是,如果底层数据库从一个更改为另一个,它可能会影响您的应用程序并需要更多工作。一个例子是,如果您的开发环境是 MySQL,而您的生产环境是使用 Oracle。另外,如果有多个结果,返回的结果绑定可能会很复杂。