快速业务通道

Java Persistence API中带注释的命名查询是否真的非常有用? - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20
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:

<named-query name="getAllOrders" queryString="SELECT OBJECT(o) FROM CustomerOrder as o WHERE o.customerId = :customerId" />

现在,我可以方便地对命名查询进行更改,而无需更改源代码和重新编译。回忆我使用 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,即使它们已通过其他方式映射。请看以下示例:

<?xml version="1.0" encoding="UTF-8"?> <entity-mappings xmlns:orm="http://java.sun.com/xml/ns/persistence/orm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm jpa.xsd "> <named-native-query name=" OrderItemResults " query="SELECT o.id,     o.quantity, o.item, i.id, i.name, i.description FROM Order o, Item i WHERE     (o.quantity > 25) AND (o.item = i.id)" result-class=""     result-set-mapping="OrderItemResults" /> <sql-result-set-mapping name="">     <entity-result entity-class="com.acme.Order.class"> <!--    <field-result column="" name=""/>     <etc..> -->     </entity-result>     <e

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号