データベースから最初のN個のエンティティを取得するためのいくつかの一般的なメソッド(Java/Spring/JPA)を作成しようとしました。すべてのエンティティは@アノテーションを持ちますが、idフィールドはさまざまな名前を持つことができます。たとえば、IDがTable.tableId
またはPlate.plateId
のエンティティです。 tableId
とplateId
の両方に@Id
アノテーションがありますが、フィールド名は(コードとデータベースで)異なります。フィールド名は変更できません。 JPA Criteria APIでascとsetMaxResultsをソートしようとしましたが、idでソートする方法が見つかりません。JPAのデータベースから最初のN個のエンティティを選択する一般的な方法
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でソートする必要がありますか?あるいは、そのような方法を実装する別の方法がありますか? JPA 2.1。
:JPAを使用して、同じことが(私は、ただ読んでJavadocをしようとしなかった)、このようなものを通して実現することができるようです。 [マップされたスーパークラス](http://stackoverflow.com/a/5258090/1199132)を使用して汎用IDフィールドを宣言し、別のID列名を使用する各サブクラスでそれを上書きすることができます。代わりに、あなたはインターフェイスでそれをしようとすることができますが、私はそれが動作するのか分からない。 –