Java Persistence API中带注释的命名查询是否真的非常有用? - 编程入门网
ble(name="ORDER")
@NamedQuery(
name="getAllOrder",
queryString="SELECT OBJECT(o) FROM CustomerOrder as o WHERE
o.customerId = :customerId")
public class CustomerOrder implements Serializable {
使用带注释的命名查询所带来的问题 稍等片刻! 我刚才不是说过吗?命名查询是外部化查询的好方法。尽管将命名查询定义为注释可以使查询在代码中得到更多重用,但是优点很少,在本质上没有使用价值。我可以方便地将命名查询打包在一个方法中,并重复执行它。其主要优点是查询的外部化,因此,带注释的命名查询(如果有)几乎没有任何意义。 还可以使用 XML 元数据定义 NamedQuery:
现在,我可以方便地对命名查询进行更改,而无需更改源代码和重新编译。回忆我使用 CMP 的时候,查询位于 XML 部署描述符中的这一事实致使此因素无任何意义。所有查询都定义在单个 ejb-jar.xml 文件中,打包在 EJB JAR中,并进一步打包在 EAR 中。在 XML 文件中更改 JPA-QL 的工作量仍很大。(Martin Fowler 也说明了这一点。) 虽然可以采用备用描述符思想,但是单一元数据使它成为一个不引人注意的选择。 JPA 有三个重要的不同之处: 只要映射文件在类路径中存在,那么它们就可以打包在任何 JAR 中(甚至松散打包)。 可以有任意多个映射文件。可以进行设计,让关联实体映射到一个 XML 文件中,或将它们分离出去。可以在一个单独的 XML 文件中保存所有查询。这就是我要建议的内容。 最后,您可以拥有命名本机查询,并将结果映射回 POJO。 例如,可以将怀疑可能更改的任何查询放在外部。在必须更改源、执行构建和安装应用程序时,考虑花费的时间量。如果能够仅更改查询并重新启动,则可以更快地进行测试。在性能测试过程中能够快速更改查询可以大大缩短测试周期。 Java Persistence API中带注释的命名查询是否真的非常有用?(3)时间:2011-01-24 IBM Roland Barcia另一种情况是销售软件的 ISV 需要针对他们销售的产品优化查询,以便与客户选择的特定数据库供应商合作。例如,更改某些子句的排序可以帮助提高某些数据库的性能。如果无法更改查询,则不能改进性能。 使用本机命名查询的能力更加强大,因为您可以使用本机 SQL 将复杂查询映射回 POJO,即使它们已通过其他方式映射。请看以下示例:
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |