JPA 实体和/与 DTO

2024-04-08

在这些情况下帮助决定何时使用 DTO 以及何时使用 Entity 的总体思路是什么?

  1. UI/服务器端java调用服务。它应该获取/发送实体还是 DTO?
  2. Web 服务调用服务。服务是否应该接受实体或 DTO?

我喜欢阅读传递实体的代码:

  1. 传递更简单,无需映射到 DTO
  2. 不需要额外的课程
  3. 与其他实体的关系已经定义,因此不需要将相关的 DTO 合并到一个 DTO 中
  4. 只是 POJO

但有人认为映射到实体的 DTO 更安全,因为它是一个合约,实体可以更改为任何形式,而 DTO 将保持不变。例如,像实体有一个字段名,DTO也有一个字段名。稍后,如果需求发生变化,数据库表发生变化,实体也会发生变化,将名称更改为firstName和lastName。但 DTO 仍然有一个字段名称,即firstName + lastName。

以下是使用 DTO 的优点:

  1. 从接受 DTO 的代码的角度来看向后兼容

我能想到的 DTO 的缺点是:

  1. 必须定义 DTO 类和映射(可能使用推土机)
  2. 程序员必须分析何时使用 DTO 和实体,我的意思是为每个方法传递 DTO 是一团糟
  3. 实体转换为 DTO 的开销,反之亦然
  4. 我仍然不确定如何映射它们的一对多关系。在JPA中我们可以延迟初始化它,但是当传入DTO时,我应该初始化它还是不初始化它。不久之后,DTO 不能有延迟初始化的代理,只能包含值。

请分享你的想法..

谢谢 !

以下是一些不同地方的引用

pro dto http://mdshannan1.blogspot.com/2010/10/reuse-jpa-entities-as-dto.html :

将实体类重用为 DTO 看起来很乱。的公共 API 类(包括公共注释 方法)不再明确定义 合同的目的是 呈现。该课程将结束于 仅在以下情况下才相关的方法 该类被用作 DTO 并且 有些方法只会 使用类时相关 作为一个实体。担忧将不会 干净地分开,事情就会 耦合更紧密。对我来说这是一个 更重要的设计考虑 然后尝试节省数量 创建的类文件。

专业实体 http://www.coderanch.com/t/462706/java-Architect-SCEA/certification/Pass-JPA-entities-across-tiers :

绝对不!!!

JPA 实体映射到数据库, 但它们并不“绑定”到数据库。 如果数据库改变,你就改变 映射,而不是对象。这 物体保持不变。这就是 重点!


我会选择 DTO 选项,原因如下:

  • 服务接口应该独立于数据库,其中一个的更改不应总是需要另一个数据库的更改。
  • 您假设您的服务将始终由 Java 客户端调用
  • 当对象位于 Web 服务调用的另一端时,使用延迟加载效果不佳。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JPA 实体和/与 DTO 的相关文章

随机推荐

  • 如何在 Visual Studio Code 中获取 Unity 函数名称的智能感知?

    我正在关注有关 Unity 的教程 我发现讲师在编写方法名称时具有智能感知功能 然而 我只有类和变量的智能感知 我的意思是像 Rigidbody 这样的 Unity 类和我自己的变量 我还读过 自动补全在 Visual Studio 中不起
  • Android apk 构建的条件资源包含/排除

    我不断回到这个问题 因为似乎没有一个干净的解决方案 有没有人有一个好的策略来从 Android 子项目中排除资源 我有两种情况 1 基础库项目具有 en es 等本地化文件 子项目1使用所有本地化 一切都很好 子项目 2 仅本地化为英语 但
  • Bookdown:如何更改章节标题的大小?

    我正在使用 bookdown 为研讨会生成幻灯片 我使用菜单中的 大 字母选项来显示幻灯片 但是章节标题字体太大 我在哪里 如何修改那个 Thanks Paul 你可以用 css 来控制它yihui https stackoverflow
  • Keycloak Java 管理客户端在触发验证电子邮件时返回 400 错误

    我在 Spring Boot 2 2 上使用 keycloak 服务器版本 8 0 1 和 keycloak java admin 客户端版本 8 0 1 使用 webflux 和 netty 而不是 tomcat 如果此类信息有帮助的话
  • Python - “ascii”编解码器无法解码字节

    我正在使用 Python 2 6 和 Jinja2 创建 HTML 报告 我为模板提供了许多结果 模板循环遍历它们并创建 HTML 表 当调用 template render 时 我突然开始收到此错误 td result result st
  • sorl-缩略图不起作用

    我已经尝试了几个小时来让 sorl thumbnail 工作 但它就是行不通 困难的部分是它没有显示错误 所以我不知道出了什么问题 我按照说明安装了它 我的完整代码可以在这里找到 https github com samos123 Samo
  • 在同一个表上触发 INSERT 和 UPDATE

    众所周知 实体框架无法保存地理数据 所以我的想法是 在我的模型中将经度和纬度指定为十进制 执行用于创建表的 SQL 脚本后 我将启动另一个脚本来添加地理列 然后我想通过触发器在每次插入或更新 经度和纬度 时更新此列 下面的触发器是好的还是坏
  • 在新机器上部署.net应用程序并得到“系统无法执行指定的程序”

    我有一个启动 Excel 的 net 控制台应用程序 我让它在我的开发环境中运行 但我无法让它在我的生产环境中运行 当我尝试运行它时 收到以下错误 系统无法执行指定的程序 我已经在我的生产服务器上安装了 net 2 0 sp2 有任何想法吗
  • PyQT 列表视图不响应数据更改信号

    我一直在关注一些教程并尝试设置列表模型 我的主窗口有两个访问同一模型的列表视图 当我更新一个列表中的一项时 另一个列表不会自行更新 直到它获得焦点 我单击它 所以看起来 dataChanged 信号没有被发出 但我无法弄清楚我的代码与我所基
  • 旋转时使用拖动手柄调整 div 大小

    我可以找到类似的问题 涉及 jQuery UI lib 或者只有 css 没有可拖动的句柄 但没有任何纯数学问题 我尝试执行的是拥有一个可调整大小和可旋转的 div 到目前为止很容易 我可以做到 但旋转时会变得更加复杂 调整大小以相反的方式
  • JavaScript 函数是否可以将其自己的函数调用作为字符串返回?

    在 JavaScript 中 函数是否可以将其自己的函数调用作为字符串返回 function getOwnFunctionCall return the function call as a string based on the para
  • 胡萝卜2 - 我可以从文件夹中聚集文档吗?

    我正在尝试对我在研究项目中收集的文档进行聚类 我正在尝试使用 Carrot2 工作台 但无法找到如何将胡萝卜指向包含文档的文件夹 请问我该怎么做 我有少量文档 txt 需要比较 它们位于独立的研究机器上 因此我无法连接到网络并在那里处理它们
  • Symfony 存储 foreach 循环的结果

    我想知道是否可以存储 foreach 循环的结果 我不知道如何更详细地解释我的问题 所以可以说以下让我得到 3 个不同的数组 events this gt getDoctrine gt getRepository TestBundle Ev
  • IS 回收时正在运行的任务会发生什么情况

    为了帮助提高客户端的性能 我将请求的处理转移到任务上 这样做是因为处理通常需要一些时间 而且我不希望客户端等待一段时间才得到 200 响应 将工作转移到任务上的 Web 服务始终在处理帖子 public void ProcessReques
  • 即使在使用显式版本的 Pipfile 和 Pipfile.lock 后,用户之间也存在差异

    抱歉 篇幅较长 这是一个非常复杂的 Pipenv 情况 在我的公司 我们正在使用 pipelinev 同时使用Pipfile and Pipfile lock 来控制不同工程师笔记本电脑上使用的包 这对我们来说比大多数团队更重要 因为我们还
  • Django 错误:vertualenv 环境错误:找不到 mysql_config [重复]

    这个问题在这里已经有答案了 当我尝试在运行 10 8 的 MAC 上的 virtualenv 中安装 MySQL python 时 出现以下错误 vertualenv EnvironmentError mysql config not fo
  • 如何在 Go 中实现不同类型的容器? [复制]

    这个问题在这里已经有答案了 下面的代码在Go中实现了一个int列表 package main import fmt type List struct Head int Tail List func tail list List List r
  • 增加或减少添加神经元或权重的学习率?

    我有一个卷积神经网络 我修改了它的架构 我没有时间重新训练和执行交叉验证 对最佳参数进行网格搜索 我想要直观地调整学习率 我是不是该increase or decrease我的 RMS 基于 SGD 优化器的学习率 如果 I add mor
  • equenceA 如何处理成对的列表?

    分拆出来this https stackoverflow com a 64068980 5825294问题 直觉上我明白了什么sequenceA在该用例中确实如此 但不是how why它是这样工作的 所以这一切都归结为这个问题 如何sequ
  • JPA 实体和/与 DTO

    在这些情况下帮助决定何时使用 DTO 以及何时使用 Entity 的总体思路是什么 UI 服务器端java调用服务 它应该获取 发送实体还是 DTO Web 服务调用服务 服务是否应该接受实体或 DTO 我喜欢阅读传递实体的代码 传递更简单