WEB开发网
开发学院软件开发Java Java Persistence API 中带注释的命名查询是否真的... 阅读

Java Persistence API 中带注释的命名查询是否真的非常有用?

 2009-10-23 00:00:00 来源:WEB开发网   
核心提示: Queryq=em.createQuery("SELECTcFROMCustomercWHEREc.nameLIKE:custName");q.setParameter("custName",name);q.setMaxResults(10);Listre

Query q = em.createQuery("SELECT c FROM Customer c WHERE c.name LIKE 
   :custName"); 
q.setParameter("custName", name); 
q.setMaxResults(10); 
List result = q.getResultList();

能够在运行时传递查询是某些动态情形(如未知条件)所必需的。不过,在大多数情形中,您希望基于整个性能测试来锁定查询。

本机查询

JPA 还使您能够对基础表使用本机 SQL 查询,并提供映射回结果的能力:

Query q = em.createNativeQuery( 
"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)", 
"OrderItemResults");

标准 SQL 在许多情形中都是必需的。我在以前的评论专栏中给出了许多理由。

命名查询

在大多数情形中,您希望定义可以重用的知名查询。命名查询使您能够在单个位置定义一个查询。命名查询有许多优点:

外部化或分离查询可以在更改查询时实现某些灵活性。这在优化查询和锁定查询时可能较为有用。

您可以从多个位置使用查询。

您可以将查询与知名的业务名称关联。

您可以将命名查询定义为注释,并在代码中的其他位置执行它。下面是执行此类命名查询的一个使用示例:

Query allOrders = em.createNamedQuery("getAllOrder"); 
allOrders.setParameter("customerId",customerId); 
Collection <CustomerOrder> results = allOrders.getResultList(); 
return results;

上一页  1 2 3 4 5  下一页

Tags:Java Persistence API

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接