我试图编写一些常用方法(Java/Spring/JPA)从数据库中获取前N个实体。所有实体都有@Id注释,但id字段可以有各种名称。例如,ID为Table.tableId
或Plate.plateId
的实体。 tableId
和plateId
都有@Id
注释,但字段名称不同(在代码和数据库中)。我无法更改字段名称。我试图通过JPA Criteria API对asc和setMaxResults进行排序,但是我找不到按id排序的方式。从数据库中选择前N个实体的常用方法JPA
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
public class EntityHelper {
protected final EntityManager entityManager;
public List<ENTITY> getFirstEntities(Class<ENTITY> entityClass, int count) {
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<ENTITY> criteriaQuery = criteriaBuilder.createQuery(entityClass);
Root<ENTITY> root = criteriaQuery.from(entityClass);
criteriaQuery.select(root);
// HOW TO SORT by ID??? criteriaQuery.orderBy(criteriaBuilder.asc());
TypedQuery<ENTITY> query = entityManager.createQuery(criteriaQuery);
return query.setMaxResults(count).getResultList();
}
}
我需要使用ID进行排序ASC什么?或者,有没有其他方法来实现这种方法? JPA 2.1。
列名不必一定与实体字段名。您可以使用[映射的超类](http://stackoverflow.com/a/5258090/1199132)来声明一个通用的id字段,然后在使用不同id列名称的每个子类中覆盖它。或者,您可以尝试使用界面来做到这一点,但我不确定它会起作用。 –