Pas*_*ent 18
现在的挑战是JPA(Hibernate - 但客户只需要使用JPA接口):如何在没有字符串连接的情况下以类型安全的方式实现这一点?
如果您正在使用JPA 2.0实现,我认为您应该查看Criteria API以构建动态查询.
如果你正在使用JPA 1.0,除了字符串连接之外没有标准的方法(我的建议是使用Hibernate的专有Criteria Queries).
以下文章也可能会给你一些(具体的)想法:Hibernate查询102:Criteria API.
想象一个有三个参数的方法:Class entityClass,String orderByColumn,boolean ascending.如何在没有字符串连接的情况下创建一个查询,以正确的顺序为我提供给定类的所有对象?
使用JPA 2.0中的Criteria API,您可以执行以下操作:
public <T> List<T> findAllEntitiesOrderedBy(Class<T> entityClass, String orderByColumn, boolean ascending) {
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<T> criteria = builder.createQuery(entityClass);
Root<T> entityRoot = criteria.from(entityClass);
criteria.select(entityRoot);
javax.persistence.criteria.Order order = ascending ? builder.asc(entityRoot.get(orderByColumn))
: builder.desc(entityRoot.get(orderByColumn));
criteria.orderBy(order);
return em.createQuery(criteria).getResultList();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29660 次 |
| 最近记录: |