Java Persistence API 中带注释的命名查询是否真的非常有用?
2009-10-23 00:00:00 来源:WEB开发网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;
Tags:Java Persistence API
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接