Я попытался написать некоторый общий метод (Java/Spring/JPA), чтобы получить первые N сущностей из базы данных. Все объекты имеют @Id аннотацию, но поле id может иметь разные имена. Например, объекты с идентификаторами Table.tableId
или Plate.plateId
. Оба tableId
и plateId
имеют аннотацию @Id
, но имена полей различаются (в коде и в базе данных). Я не могу изменить имена полей. Я попытался сортировать asc и setMaxResults через API-интерфейс JPA, но я не могу найти способ сортировки по 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();
}
}
Что мне нужно для того, чтобы сделать сортировку asc по id? Или, может быть, есть ли другой способ реализовать такой метод? JPA 2.1.
Названия столбцов не должны совпадать с именами объект поля обязательно. Вы можете использовать [сопоставленный суперкласс] (http://stackoverflow.com/a/5258090/1199132), чтобы объявить общее поле id и затем переопределить его в каждом из подклассов, в которых используется другое имя столбца идентификатора. Кроме того, вы можете попробовать сделать это с помощью интерфейса, но я не уверен, что он сработает. –