Hibernate Annotations - 字段访问和属性访问哪个更好?

2024-04-11

这个问题有点相关Hibernate注解放置问题 https://stackoverflow.com/questions/305880/hibernate-annotation-placement-question.

但我想知道哪个是better?通过属性访问还是通过字段访问? 各自的优点和缺点是什么?


两者都有争议,但大多数源于某些用户需求“如果需要添加逻辑怎么办”或“xxxx 破坏封装”。然而,没有人真正评论这个理论,并给出合理的论证。

Hibernate/JPA 在持久化对象时实际上在做什么 - 嗯,它是持久化对象的状态。这意味着以易于复制的方式存储它。

什么是封装?封装意味着使用应用程序/客户端可以用来安全访问数据的接口封装数据(或状态) - 保持数据一致和有效。

可以将其想象为 MS Word。 MS Word 在内存中维护文档的模型 - 文档状态。它提供了一个用户可以用来修改文档的界面 - 一组按钮、工具、键盘命令等。但是,当您保存(保存)该文档时,它会保存内部状态,而不是一组按键和鼠标用于生成它的点击次数。

保存对象的内部状态不会破坏封装 - 否则,您不会真正理解封装的含义以及它存在的原因。这就像对象序列化一样。

因此,在大多数情况下,保留字段而不是访问权限是合适的。这意味着可以按照数据库的存储方式准确地重新创建对象。它不需要任何验证,因为这是在创建原始数据时以及将其存储在数据库之前完成的(除非上帝禁止,您在数据库中存储无效数据!!!)。同样,应该不需要计算值,因为它们在存储对象之前就已经计算好了。该对象的外观应该与保存之前的样子一样。事实上,通过在 getter/setter 中添加额外的东西,你实际上是增加您重新创建的内容与原始内容不完全相同的风险。

当然,添加此功能是有原因的。可能存在一些用于持久化访问器的有效用例,但是,它们通常很少见。例如,您可能希望避免保留计算值。但是,您可能想问为什么不在值的 getter 中按需计算它,或者在 getter 中延迟初始化它。就我个人而言,我想不出任何好的用例,并且这里的答案都没有真正给出“软件工程”的答案。

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

Hibernate Annotations - 字段访问和属性访问哪个更好? 的相关文章

  • 通过SOCKS代理连接Kafka

    我有一个在 AWS 上运行的 Kafka 集群 我想用标准连接到集群卡夫卡控制台消费者从我的应用程序服务器 应用程序服务器可以通过 SOCKS 代理访问互联网 无需身份验证 如何告诉 Kafka 客户端通过代理进行连接 我尝试了很多事情 包
  • 使用 GWT 读取非常大的本地 XML 文件

    我正在使用 GWT 构建我的第一个 Java 应用程序 它必须从一个非常大的 XML 文件中读取数据 当我尝试发送对文件中信息的请求时遇到问题 并且我不太确定它是否与文件的大小或我的语义有关 在我的程序中 我有以下内容 static fin
  • 是否有任何简单(且最新)的 Java 框架可用于在 Swing 应用程序中嵌入电影?

    我正在构建一个小型 Swing 应用程序 我想在其中嵌入一部电影 重要的是 这个应用程序是一个 WebStart 应用程序 并且该库应该能够打包在我启动的 jnlp 中 即 不依赖于本机库 我知道并尝试过 JMF 但我认为与其他框架相比 其
  • 不同类型的数组

    是否可以有一个包含两种不同类型数据的数组 我想要一个包含双精度型和字符串的数组 我尝试过 ArrayList
  • Spring RestTemplate 使用 cookie 遵循重定向

    最近我遇到了一个问题 我需要做一个GET请求远程服务 我假设使用一个简单的 servlet 并且 RestTemplate 返回Too many redirects 经过一番调查 似乎对指定远程服务发出的第一个请求实际上只是一个 302 重
  • 通往楼梯顶部的可能路径

    这是一个非常经典的问题 我听说谷歌在他们的面试中使用过这个问题 问题 制定一个递归方法 打印从楼梯底部到楼梯顶部的所有可能的独特路径 有 n 个楼梯 您一次只能走 1 步或 2 步 示例输出 如果它是一个有 3 级楼梯的楼梯 1 1 1 2
  • 在 Wildfly 中与 war 部署共享 util jar 文件

    假设我有一个名为 util jar 的 jar 文件 该 jar 文件主要包含 JPA 实体和一些 util 类 无 EJB 如何使这个 jar 可用于 Wildfly 中部署的所有 war 无需将 jar 放置在 war 的 WEB IN
  • org.hibernate.QueryException:无法解析属性:文件名

    我正在使用休眠Criteria从列中获取值filename在我的桌子上contaque recording log 但是当我得到结果时 它抛出异常 org hibernate QueryException 无法解析属性 文件名 com co
  • 是否可以使用 Flying Saucer (XHTML-Renderer) 将 css 解析为类路径资源?

    我正在尝试将资源打包到 jar 中 但我无法让 Flying Saucer 在类路径上找到 css 我无法轻松构建 URL 来无缝解决此问题 https stackoverflow com questions 861500 url to l
  • 如何将 Mat (opencv) 转换为 INDArray (DL4J)?

    我希望任何人都可以帮助我解决这个任务 我正在处理一些图像分类并尝试将 OpenCv 3 2 0 和 DL4J 结合起来 我知道DL4J也包含Opencv 但我认为它没什么用 谁能帮我 如何转换成 INDArray 我尝试阅读一些问题here
  • 使用 Guice 优化注册表

    你好 今天思考了一种优化 有一些疑问 语境 我正在使用 Guice 2 进行 Java 开发 在我的网络应用程序中 我有一个转换器注册表 可以即时转换为某种类型 转换器描述如下 public class StringToBoolean im
  • 生成的序列以 1 开头,而不是注释中设置的 1000

    我想请求一些有关 Hibernate 创建的数据库序列的帮助 我有这个注释 下面的代码 在我的实体类中 以便为合作伙伴表提供单独的序列 我希望序列以 1000 开头 因为我在部署期间使用 import sql 将测试数据插入数据库 并且我希
  • Java:如何为山区时间创建 TimeZone 对象?

    必须不禁用夏令时 嗯 在这个清单 http en wikipedia org wiki List of tz database time zones在 zoneinfo 时区名称中 有很多声称是 山地时间 找到最适合您想要的那个 然后使用它
  • HashMap 值需要不可变吗?

    我知道 HashMap 中的键需要是不可变的 或者至少确保它们的哈希码 hashCode 不会改变或与另一个具有不同状态的对象发生冲突 但是 HashMap中存储的值是否需要与上面相同 为什么或者为什么不 这个想法是能够改变值 例如在其上调
  • Docker 和 Eureka 与 Spring Boot 无法注册客户端

    我有一个使用 Spring Boot Docker Compose Eureka 的非常简单的演示 我的服务器在端口 8671 上运行 具有以下应用程序属性 server port 8761 eureka instance prefer i
  • 是否可以使用 Java Guava 将函数应用于集合?

    我想使用 Guava 将函数应用于集合 地图等 基本上 我需要调整 a 的行和列的大小Table分别使所有行和列的大小相同 执行如下操作 Table
  • “无法实例化活动”错误

    我的一个 Android 应用程序拥有大约 100 000 个用户 每周大约 10 次 我会通过 Google 的市场工具向我报告以下异常情况 java lang RuntimeException Unable to instantiate
  • Spring-ws:如何从没有“Request”元素的 xsd 创建 Wsdl

    尝试为客户端实现 SOAP Web 服务 我需要一个 wsdl 文件来通过soapUI 测试该服务 但正如您在下面看到的 这个 xsd 没有 Request 和 Response 方法 所有请求和响应都被定义为基本 ServiceProvi
  • OpenCSV:将嵌套 Bean 映射到 CSV 文件

    我正在尝试将 bean 映射到 CSV 文件 但问题是我的 bean 具有其他嵌套 bean 作为属性 所发生的情况是 OpenCSV 遍历属性找到一个 bean 然后进入其中并映射该 bean 内的所有数据 如果找到另一个 bean 它就
  • Java中HashMap和ArrayList的区别?

    在爪哇 ArrayList and HashMap被用作集合 但我不明白我们应该在哪些情况下使用ArrayList以及使用时间HashMap 他们两者之间的主要区别是什么 您具体询问的是 ArrayList 和 HashMap 但我认为要完

随机推荐

  • 编辑器中的 Unity 模糊和像素化精灵(无像素艺术)

    我目前正在 Unity 中制作一款类似移动三消游戏 我已经在 Inkscape 中以 256x256 制作了宝石 用于匹配的对象 的所有图形 并以 90 dpi 导出它们 PNG 文件 也尝试使用 360 但没有任何改变 我的问题是 当我在
  • 在 TPL 中返回空静态任务是一种不好的做法吗?

    在某些情况下 我想有条件地运行任务 我使用某种扩展方法 如下所示 public static class MyTaskExtension private static Task theEmptyTask Task Factory Start
  • 如何在 Laravel 5.5 中获取验证消息

    大家好 我正在开发 Laravel 5 5 在这里我需要显示我的 API 的验证消息 到目前为止我已经这样做了 validator Validator make request gt all first name gt email requ
  • grep 时间命令输出

    Using time ls 我有以下输出 time ls l total 2 rwx 1 FRIENDS None 97 Jun 23 08 59 location txt rw r r 1 FRIENDS None 10 Jun 23 0
  • JavaScript OOP 原型在构造函数之外?

    我正在阅读developer mozilla org 的 OOP JS 指南 并发现了以下代码片段 function Person gender this gender gender Person prototype gender Pers
  • 标签 在 Google 脚本中意味着什么?

    是否是标签Google 脚本的特定语法或者它可以在纯 html javascript 页面中工作吗 有没有相关的描述 这类似于PHP 标签 但当我看到这个时我怀疑 正式地 这些代码在 GAS 文档中被称为 scriptlet 它们是用于服务
  • 缓存 auth_request 中的令牌

    我想缓存请求标头字段授权中的令牌 Authorization Bearer abcdefghijklmnopqrstuvwxyz 我的目标是 我不必验证验证服务器上的每个请求 如果授权令牌已缓存 且有效 则请求应调用 API 而无需验证 l
  • 如何有效地逐行迭代“Vec>”?

    我正在写一个图书馆 它采用了Vec
  • 为什么 PostgreSQL 在 Windows 上这么慢?

    我们有一个使用 MySql 运行的应用程序 在我们发现 MySql 不支持 PostGIS 所具有的某些 GIS 功能后 我们发现它不适合我们的应用程序 注意 mysql 仅支持最小边界矩形 GIS 搜索 所以我们将数据库更改为 Postg
  • 导入模块时内存使用差异

    我想知道以这些方式导入模块时内存使用情况有什么区别 import Mod1 from Mod1 import from Mod1 import a b c 主要介于前两者之间 第一个使用最少的内存 因为它只在模块范围中创建单个名称 第二个使
  • libgcc.a 和 libgcc_s.a 之间的区别?

    我们已经安装了 GCC 和libgcc在 AIX 6 1 上使用 RPM 文件 我想知道的是为什么 libgcc s a 没有在以下文件夹下创建 opt freeware lib gcc powerpc ibm aix6 1 0 0 4 2
  • ASP.NET 母版页 DefaultButton 覆盖

    我有一个带有表单元素的母版页 并将 defaultbutton 属性设置为服务器端 ImageButton 在我的其中一个页面上 我想通过在 Page Load 事件中设置 Forms DefaultButton 来 覆盖 母版页默认按钮属
  • UILabel 文本没有改变,但是 xx.title 正在工作

    我有两个视图控制器 在第一个视图控制器中 我有名称列表 当我单击它时 我希望在第二个视图控制器中显示相同的名称 我有下面的代码 void tableView UITableView tableView didSelectRowAtIndex
  • didChangeObject:未调用 NSFetchedResultsController

    我几乎尝试了所有方法 但无法找出问题所在 我有一个 NSFetchedResultsController 并从核心数据中获取一些帖子 然后我有一个方法 可以将新帖子插入到同一上下文中并保存上下文 通常 现在应该调用 didChangeObj
  • 将图像置于 div 中居中

    我已经在 a 中设置了图像的边框div成为无 我现在想将该图像放在其包含的 div 中居中 我尝试过使用margin 0 auto 但这没有用 我确信我忽略了一些愚蠢的事情 但我想寻求 stackoverflow 社区的帮助 这样我就不需要
  • Azure WebJobs SDK 基础知识

    我想了解 Azure WebJobs SDK 上的 JobHostConfiguration 我在哪里可以找到配置 它在 app config 上吗 JobHostConfiguration 如何识别这是不是 IsDevelopment 我
  • 自定义属性与非自定义属性?

    实现的东西ICustomAttributeProvider接口将允许您获取已通过以下方式应用到它的自定义属性GetCustomAttributes方法 据我了解 自定义属性基本上是一个特殊的类 以 Attribute 结尾并扩展Attrib
  • iCloud Drive 通过 NSMetadataQuery 列出目录和文件

    I have built an iCloud enabled app named rmc My app now can upload files to iCloud Drive and get metadata by NSMetadataQ
  • Asp.net MVC Web Api Http 放置和删除请求失败

    我正在使用 Asp net MVC 4Web Api项目 我的应用程序使用 mvc 来实现网站 它向 Web API 发出 http 请求以实现服务器功能 对控制器的常规页面请求工作正常 并且能够显示网页 该应用程序能够使get and p
  • Hibernate Annotations - 字段访问和属性访问哪个更好?

    这个问题有点相关Hibernate注解放置问题 https stackoverflow com questions 305880 hibernate annotation placement question 但我想知道哪个是better