我試圖編寫一些常用方法(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列名稱的每個子類中覆蓋它。或者,您可以嘗試使用界面來做到這一點,但我不確定它會起作用。 –