JPA 中 select 数据库中前 N 个实体的常用方法
Common method to select first N entities from database in JPA
我尝试编写一些常用方法 (Java/Spring/JPA) 以从数据库中获取前 N 个实体。所有实体都有 @Id 注释,但 id 字段可以有不同的名称。例如,ID 为 Table.tableId
或 Plate.plateId
的实体。 tableId
和 plateId
都有 @Id
注释,但字段名称不同(在代码中和在数据库中)。我无法更改字段名称。我试图通过 JPA Criteria API 对 asc 和 setMaxResults 进行排序,但我找不到按 id 排序的方法。
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();
}
}
我需要用什么来让 asc 按 id 排序?或者也许还有其他方法可以实现这种方法? JPA 2.1.
出于使用 Hibernate 的类似目的,我通过 ClassMetadata.getIdentifierPropertyName() 获得实体的 ID 属性 的名称。使用 JPA,似乎可以通过这样的方式实现相同的目的(我没有尝试,只是阅读 javadoc):
IdentifiableType identifiableType = (IdentifiableType) entityManager.getMetamodel().managedType(entityClass);
String idPropertyName = identifiableType.getId(entityClass).getName();
criteriaQuery.orderBy(criteriaBuilder.asc(root.get(idPropertyName)));
我尝试编写一些常用方法 (Java/Spring/JPA) 以从数据库中获取前 N 个实体。所有实体都有 @Id 注释,但 id 字段可以有不同的名称。例如,ID 为 Table.tableId
或 Plate.plateId
的实体。 tableId
和 plateId
都有 @Id
注释,但字段名称不同(在代码中和在数据库中)。我无法更改字段名称。我试图通过 JPA Criteria API 对 asc 和 setMaxResults 进行排序,但我找不到按 id 排序的方法。
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();
}
}
我需要用什么来让 asc 按 id 排序?或者也许还有其他方法可以实现这种方法? JPA 2.1.
出于使用 Hibernate 的类似目的,我通过 ClassMetadata.getIdentifierPropertyName() 获得实体的 ID 属性 的名称。使用 JPA,似乎可以通过这样的方式实现相同的目的(我没有尝试,只是阅读 javadoc):
IdentifiableType identifiableType = (IdentifiableType) entityManager.getMetamodel().managedType(entityClass);
String idPropertyName = identifiableType.getId(entityClass).getName();
criteriaQuery.orderBy(criteriaBuilder.asc(root.get(idPropertyName)));