检索 JPA 中通用实体的主键列定义

2023-12-27

假设我有一个使用 JPA 列出实体的通用方法

    public <T> List<T> list(Class<T> entity) throws Exception {

        List<T> result = new ArrayList<T>();
        CriteriaBuilder builder = em.getCriteriaBuilder();

        CriteriaQuery<T> query = builder.createQuery( entity );
        Root<T> root = query.from( entity );

        query.select( root );

        //possible?
        query.orderBy(builder.asc(...));

        result = em.createQuery( query ).getResultList();

        return result;
   }

我们还有什么可以补充的吗orderby到查询并使其按主键排序而不指定主列作为表达式?我的意思是,有没有一个Key/Constant或者 JPA 中的某些内容意味着任何实体的主键列,或者检索它的 util 方法?


此信息可通过以下方式获得元模型 http://docs.oracle.com/javaee/6/api/javax/persistence/metamodel/package-summary.html。在单一 id 属性的情况下,以下内容应该有效(未经测试,因此可能会出现一些问题,特别是对于泛型,但一般方法是这样的):

public <T> SingularAttribute<? super T, ?> getIdAttribute(EntityManager em, 
                                                          Class<T> clazz) {
    Metamodel m = em.getMetamodel();
    IdentifiableType<T> of = (IdentifiableType<T>) m.managedType(clazz);
    return of.getId(of.getIdType().getJavaType());
}

//usage
SingularAttribute idAttribute = getIdAttribute(em, entity);
Path<?> pathToId = root.get(idAttribute);
query.orderBy(builder.asc(pathToId));

当实体使用IdClass http://docs.oracle.com/javaee/6/api/javax/persistence/IdClass.html也应该支持,解决方案有点复杂,但可以使用提供的方法可识别类型 http://docs.oracle.com/javaee/6/api/javax/persistence/metamodel/IdentifiableType.html.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检索 JPA 中通用实体的主键列定义 的相关文章

随机推荐

  • 如何更改VS的编译器?

    我正在使用 VS 2010 我更改了编译器 C 代码而不是 C 的设置 它工作正常 但问题是 MS 编译器不支持 C99 标准 因此我正在寻找可以与 VS 10 一起使用的 C 编译器 如何做到这一点 提前致谢 MS Visual Stud
  • 我怎样才能知道我的日历意图的结果?

    从我的应用程序中 我启动日历的目的是 Calendar cal Calendar getInstance Intent intent new Intent Intent ACTION EDIT intent setType vnd andr
  • 返回 varchar(max) 存储过程的输出参数截断为 4000 个字符

    我有一个带有 SQL2012 数据库的经典 ASP 应用程序 我最近将表列从 varchar 8000 更改为 varchar max 因为它不够大 无法存储所需的数据 我可以使用需要存储的所有数据更新列 但我用来返回列数据作为输出参数的
  • EKEventStore.calendars 返回不存在的“日历”对象

    当使用 IOS5 获取所有日历时 EKEventStore eventStore EKEventStore alloc init NSArray calendars eventStore calendars 返回了一个名为 calendar
  • iOS 13 设备上语音识别(支持OnDevice Recognition 标志)

    我正在尝试让 iOS 13 OnDevice 语音识别正常工作 但是 验证 supportOnDeviceRecognition 标志 这是启用 OnDevice 识别的初步步骤 始终返回 false 我使用的是装有 iOS 13 3 的第
  • 如何在 Flutter 中构建 apk 创建旧版本应用程序

    我正在尝试在 Flutter 中构建我的发布应用程序 当我运行时 flutter run 在调试和测试模式下一切正常 但是当我尝试使用以下方法构建发布应用程序时 flutter build apk 它创建了我的一个旧的首次发布应用程序 我之
  • 打印 Haskell 的评估(重写)步骤以用于教育/学习目的。是否可以?

    我用书上的例子来描述这个问题 Simon Thompson 的书 HASKELL 函数式编程的技巧 第 82 页 见下图 显示了以下评估步骤 fac 4 问题 是否可以使用某些工具或 Haskell 调试器 来写出 GHCi 在评估以下值时
  • RecyclerView ItemTouchHelper.Callback:拖动交换条件

    我想以这样的方式实现拖动卡片 当我拖动的卡片与元素不完全重叠而仅重叠 50 时 卡片就会开始重新排列 看一个例子 现在 为了将右侧的卡片移至左侧 我需要将其与我正在拖动的卡片完全重叠 我尝试从 ItemTouchHelper Callbac
  • 为 Winforms DataGrid 控件添加超链接列

    如何为 Winforms DataGrid 控件添加超链接列 现在我正在添加一个像这样的字符串列 DataColumn dtCol new DataColumn dtCol DataType System Type GetType Syst
  • 如何计算IEEE 802.11 CRC-32 FCS?

    这是来自 IEEE Std 802 11 2012 第 8 2 4 8 FCS 字段 我无法理解最后两段 除法的初始余数预设为全部 是什么意思 为什么我们需要这样做 计算字段和 FCS 的串行输入位 是什么意思 将 CRC 初始化为全 1
  • 警告:与字符串文字比较会导致未指定的行为

    我正在开始一个用 C 语言为 linux 编写一个简化 shell 的项目 我对 C 和 Linux 一点也不精通 这正是我认为这是一个好主意的原因 从解析器开始 我已经遇到了一些问题 代码应该很简单 这就是为什么我没有包含任何注释 我收到
  • openssl c++ 3DES 文件加密解密失败

    我正在使用 openssl c lib 使用 3DES 加密解密文件 如果文件包含几个单词 则文件将被加密并解密 但如果源纯文件包含更多单词 则解密不正确 任何建议都会很友善 include
  • 如何在JSP中包含HTML?

    我搜索过这个问题 有一些答案 但与我的问题不完全一样 所以 这是我的jsp代码
  • TransactionScope 默认超时值是多少?

    当我创建 TransactionScope 对象时 如下所示 using TransactionScope ts new TransactionScope Do stuff 给定 ts 对象的默认事务超时是多少 根据 David Brown
  • OpenAL - 确定最大来源

    是否有 API 允许您定义底层声音硬件允许的 OpenAL 源 最大数量 在互联网上搜索 我发现了 2 个建议 继续生成 OpenAL 源 直到出现错误 然而 FreeSL OpenAL 包装器 中有一条注释指出 这 非常糟糕 甚至可能使库
  • Keycloak 在登录过程中添加动态用户会话注释

    我是 Keycloak 的新手 并尝试自定义登录阶段以添加动态参数作为用户会话注释 在旧系统中 用户使用用户名 密码和附加参数登录 让我们称之为动态参数 该动态参数在每个用户登录中可以不同 并且取决于用户 当用户向服务发送请求时 它用于安全
  • 支持 v7 库中的 ShareActionProvider 不起作用

    我正在尝试使用本教程中的支持库来实现 ShareActionProviderhttp developer android com reference android support v7 widget ShareActionProvider
  • ListView 中的居中文本项

    如何水平居中对齐文本项ListView in my Layout 老实说 在问这样一个基本问题之前 我在谷歌上搜索了至少一个小时 Thanks
  • 如何在SQL Server上模拟DEADLOCK?

    我正在尝试模拟 SQL Server 上的死锁 worker id salary 1 1 100 2 2 300 事务 1 在 5 秒内完成 TRANSACTION 1 Use dbmcw DECLARE sal1 INT sal2 int
  • 检索 JPA 中通用实体的主键列定义

    假设我有一个使用 JPA 列出实体的通用方法 public