”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > ## JPQL 中的构造函数表达式:使用还是不使用?

## JPQL 中的构造函数表达式:使用还是不使用?

发布于2024-11-08
浏览:966

## Constructor Expressions in JPQL: To Use or Not to Use?

JPQL 中的构造函数表达式:有益还是有问题的实践?

JPQL 提供了使用构造函数表达式在 select 语句中创建新对象的能力。虽然此功能提供了某些优势,但它引发了关于其在软件开发实践中是否适用的问题。

构造函数表达式的优点

构造函数表达式允许开发人员从实体中提取特定数据并进行组装,从而简化了数据检索将它们转换为任意类的新对象。与返回值数组相比,这提高了类型安全性和可读性。当检索数据以在持久性上下文之外进行显示或操作时,它特别有用。

潜在缺点

但是,有些人认为构造函数表达式引入了不必要的复杂性,并可能导致代码臃肿。它们还可能通过阻止持久性提供程序基于实体映射进行优化来阻碍查询优化。此外,如果返回的对象不表示持久实体并且未附加到会话,构造函数表达式可以创建孤立实体。

使用理由

构造函数表达式的使用在场景中是合理的其中以类型安全的方式检索特定数据集至关重要。这包括:

  • 填充 DTO 或数据传输对象以在表示层或 API 中使用。
  • 从实体中过滤和提取特定属性,而不检索整个实体图。
  • 创建表示从持久数据派生的聚合或摘要信息的临时对象。

避免滥用和优化

为了避免潜在的陷阱,开发人员应该:

  • 谨慎使用构造函数表达式,重点关注利大于弊的场景。
  • 避免使用构造函数表达式创建持久实体,因为这可能会导致孤立对象。
  • 通过确保所选属性相关并避免不必要的联接,使用构造函数表达式优化查询。
  • 考虑使用 JPQL 子查询来实现相同的结果,而无需创建新对象。
最新教程 更多>
  • 为什么 imagecreatefrompng() 产生黑色背景而不是透明区域?
    为什么 imagecreatefrompng() 产生黑色背景而不是透明区域?
    imagecreatefrompng() 生成黑色背景而不是透明区域?在 PHP 中,imagecreatefrompng() 函数通常用于处理 PNG图像。然而,据观察,使用此函数时,PNG 透明度可能会转换为纯黑色。要解决此问题,可以在使用 imagecreatetruecolor() 创建新画...
    编程 发布于2024-11-08
  • Go反射中reflect.Type和reflect.Value的主要区别是什么?
    Go反射中reflect.Type和reflect.Value的主要区别是什么?
    Go 中的反射类型和值Go 中的反射允许开发人员在运行时检查和操作类型和值。了解它们的区别对于有效使用反射至关重要。反射中的类型与值在反射中,reflect.TypeOf(i) 返回一个reflect.Type 对象,而reflect.ValueOf(i)返回一个reflect.Value obje...
    编程 发布于2024-11-08
  • 如何在 AngularJS 中安全地设置变量的 iframe src 属性?
    如何在 AngularJS 中安全地设置变量的 iframe src 属性?
    在 AngularJS 中从变量设置 iframe src 属性在 AngularJS 中,尝试从以下位置设置 iframe 的 src 属性时可能会遇到问题一个变量。为了解决这个问题,这里有一个分步指南:1。注入 $sce 服务将 $sce(严格上下文转义)服务注入控制器以处理清理。functio...
    编程 发布于2024-11-08
  • 为什么我的 KeyListener 无法在 JPanel 中工作?
    为什么我的 KeyListener 无法在 JPanel 中工作?
    JPanel 中 KeyListeners 无响应:常见问题当使用 KeyListeners 检测 JPanel 中的击键时,开发人员经常遇到这样的问题:侦听器无法触发所需的操作。此问题可能由多个因素引起。焦点组件约束KeyListener 依赖将自身附加到焦点组件才能正常运行。默认情况下,焦点不会...
    编程 发布于2024-11-08
  • 从 React 到 React Native 的旅程
    从 React 到 React Native 的旅程
    作为一名 React / JS 开发人员,您可能有这样的想法 “我应该学习 React Native 吗?” 这是一个公平的问题,也是我几年前问自己的问题。事实证明,学习 React Native 绝对是正确的决定。这让我成为了亚马逊的高级开发倡导者,我现在使用 React Native 跨 And...
    编程 发布于2024-11-08
  • 使用 Filament 和 Laravel 构建强大的管理面板:分步指南
    使用 Filament 和 Laravel 构建强大的管理面板:分步指南
    Laravel 是一个强大的 PHP 框架,为开发 Web 应用程序提供了坚实的基础。 Filament 是一个开源、优雅的 Laravel 管理面板和表单构建器,可简化管理界面的创建。本指南将引导您使用最新版本的 Filament 和 Laravel 构建强大的管理面板。 Laravel SaaS...
    编程 发布于2024-11-08
  • 如何从 Pandas DataFrame 中提取列标题?
    如何从 Pandas DataFrame 中提取列标题?
    从 Pandas DataFrame 中检索列标题Pandas DataFrame 是通用的数据结构,可以实现高效的数据操作和分析。一项常见任务涉及提取列标题,这对于获取 DataFrame 结构的概述或进一步处理非常有用。假设您有一个从用户输入导入的 DataFrame,其中列的数量和名称未知。要...
    编程 发布于2024-11-08
  • 通过示例解释 Web 存储 API
    通过示例解释 Web 存储 API
    Web Storage API: বিস্তারিত আলোচনা Web Storage API হলো জাভাস্ক্রিপ্টের একটি শক্তিশালী API যা ব্রাউজারে ব্যবহারকারীর ডেটা স্টোর করার জন্য ব্যবহ...
    编程 发布于2024-11-08
  • 使用 Web 工具进行 Android 开发:使用 Ionic React 进行生产的最快方式
    使用 Web 工具进行 Android 开发:使用 Ionic React 进行生产的最快方式
    Investing in Android development can yield a huge device market share, expanded market reach, and high return on investment. With over 6.8 billion sma...
    编程 发布于2024-11-08
  • 在Python中如何检查字符串是否以“hello”开头?
    在Python中如何检查字符串是否以“hello”开头?
    在Python中验证以“hello”开头的字符串在Python中,确定字符串是否以“hello”开头类似于Bash的常规表达方式。实现方法如下:aString = "hello world" aString.startswith("hello")startsw...
    编程 发布于2024-11-08
  • 使用 Flama JWT 身份验证保护 ML API
    使用 Flama JWT 身份验证保护 ML API
    You've probably heard about the recent release of Flama 1.7 already, which brought some exciting new features to help you with the development and pro...
    编程 发布于2024-11-08
  • 掌握 MySQL 性能:MySQL 延迟是什么及其重要性
    掌握 MySQL 性能:MySQL 延迟是什么及其重要性
    了解数据库性能的复杂性可能具有挑战性,但了解延迟等关键指标至关重要。随着企业越来越依赖数据驱动的洞察力,确保数据库快速有效地响应变得至关重要。在本文中,我们将深入探讨 MySQL 延迟的概念、其重要性,以及数据库优化先驱 Releem 如何处理此指标。 什么是延迟? 延迟是一个在从网...
    编程 发布于2024-11-08
  • 如何以编程方式检查默认浏览器是否在 Android 上运行?
    如何以编程方式检查默认浏览器是否在 Android 上运行?
    检查Android上的应用程序执行状态作为一名Android开发者,您可能经常会遇到需要检查特定应用程序是否运行的情况,例如默认浏览器正在运行。此功能对于在应用程序中实现条件行为或交互至关重要。要以编程方式完成此操作,一种简单的方法涉及利用 ActivityManager 类。以下代码片段提供了如何...
    编程 发布于2024-11-08
  • Nestjs 中的事件
    Nestjs 中的事件
    什么是活动? 事件是指示已发生操作或状态更改的信号或通知。在应用程序的上下文中,事件允许系统的不同部分以异步和解耦的方式进行通信。这在微服务架构中特别有用,在微服务架构中,您需要组件独立运行,但仍然能够“监听”并对系统其他地方发生的变化做出反应。 NestJS 中的事件 在 NestJS 中,使用 ...
    编程 发布于2024-11-08
  • JavaScript 中的“&”和“&&”运算符有什么区别?
    JavaScript 中的“&”和“&&”运算符有什么区别?
    JavaScript 中“&”和“&&”运算符的区别JavaScript 中“&”和“&&”运算符具有不同的作用目的,每个都有自己的行为和使用场景。'&' 按位 AND运算符'&' 是按位 AND 运算符,主要用于低级编程或处理二进制数据时。它在两个数字操作数之间执行...
    编程 发布于2024-11-08

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3