当前位置: 首页 > 知识库问答 >
问题:

JPA中从数据库中选择前N个实体的常用方法

左丘智渊
2023-03-14

我尝试编写一些常用方法(Java/Spring/JPA)从数据库中获取前N个实体。所有实体都有@Id注释,但Id字段可以有各种名称。例如,ID为表的实体。tableId或板。平板。tableId和plateId都有注释,但字段名不同(在代码和数据库中)。我无法更改字段名。我试图通过JPA标准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。

共有1个答案

糜博远
2023-03-14

出于使用Hibernate的类似目的,我通过ClassMetadata获取实体的id属性的名称。getIdentifierPropertyName()。使用JPA,似乎同样可以通过这样的方式实现(我没有尝试,只是阅读了javadoc):

IdentifiableType identifiableType = (IdentifiableType) entityManager.getMetamodel().managedType(entityClass);
String idPropertyName = identifiableType.getId(entityClass).getName();
criteriaQuery.orderBy(criteriaBuilder.asc(root.get(idPropertyName)));
 类似资料:
  • 问题内容: 我试图从看起来像这样的数据库表结果中选择前2条记录 我试过这个查询 但是有些主题,例如失踪的地方,我什至尝试了以下链接的建议 如何选择每个组的前N行? 但是我为每个受检者得到两个以上 我究竟做错了什么? 问题答案: 您可以使用相关的子查询: 该查询通过串联三列来构造单列主键。如果您有真正的主键(如),则可以用代替。 SQL Fiddle中的示例。

  • 问题内容: 我有一个包含69个表的数据库,我只想选择每个表的前三个记录。 我可以在 每个表 上执行以下操作: 但是,如果我要手动执行此操作,则将花费大量时间。 您能建议一个解决方法吗? 我尝试了此解决方案,但可以使其正常工作(我不知道如何针对MSSQL对其进行修改) 编辑 感谢您的答复。我可能还不够清楚:我的意思是我想解析每个单独的表,并且只获得前3个记录,而不是转到下一个表。以下是我需要的Yar

  • 我正在尝试执行一个JPA SQL查询以从数据库中选择特定列(查询:'select username,ranking_points_sum from user order by ranking_points_sum ASC')。 我的用户实体: 我的JPA存储库: 如果我更改JPA存储库查询,从数据库中选择所有内容,如下所示: 我没有发现任何错误。“http://localhost:8080/api

  • 问题内容: 我有一个称为Data的数据库,它是数据库中每个实体的父级。它包含Id等通用属性。然后,我有了一个扩展Data的实体,这也是由于其子类的通用功能而引起的。我的数据库中的映射是正确的。 这是我的等级制度的一个例子 并且表已正确映射: 无论如何,是否在数据库中查询所有作为Employee实例的Employee子类(FullTimeEmployee,PartTimeEmployee),而不在查

  • 问题内容: 我有一个程序尝试为每个特工在表格中插入样本,每个特工的样本数量因某些计算而异 我到这里的错误是 消息4115,级别15,状态1,第4 行在TOP子句的参数中不允许引用列“ samplesize”。此处仅允许引用外部作用域的列或独立的表达式和子查询。 有没有解决方法? 任何帮助表示赞赏。 提前致谢。 问题答案: 您可以用来做基本上相同的事情: 您也许可以简化一下,但是我不知道它是否来自d

  • Mine当前使用的是application.properties文件中包含: 提前致谢