我正在尝试转换一个‘TableController’-我们用来(没有ORM)生成动态SQL的类(实际上,order列和方向被附加到SQL)。
可以把这个“TableController”想象成一个类,它有一个函数可以按照给定的顺序(字符串列/属性名,boolean asc/desc,两者都在运行时)返回给定类(在运行时已知)的实体列表。
现在的挑战是,对于JPA (Hibernate --但客户只需要使用JPA接口):如果没有字符串连接,并且以类型安全的方式,我如何实现这一点?
谢谢!
发布于 2010-10-29 19:14:40
现在的挑战是,使用JPA (Hibernate -但客户要求只使用JPA接口):如果没有字符串连接,并且以类型安全的方式,我如何实现这一点?
如果您使用的是JPA2.0实现,我认为您应该考虑使用Criteria API来构建动态查询。
如果您使用的是JPA1.0,除了字符串连接之外没有其他标准方法(我的建议是使用Hibernate的专有Criteria Queries)。
下面的文章可能还会给你一些(具体的)想法:Hibernate Querying 102 : Criteria API。
想象一个有三个参数的方法:类entityClass,字符串orderByColumn,布尔升序。如何创建一个没有字符串连接的查询,使其以正确的顺序提供给定类的所有对象?
使用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();
}
https://stackoverflow.com/questions/4050111
复制相似问题