当前位置: 首页 > 面试题库 >

为什么JPA实体中的属性不允许“公开”?

葛阳华
2023-03-14
问题内容

在JPA
2.0规范
说,第22页:

类的实例变量必须是私有的,受保护的或程序包可见性,而与使用字段访问还是属性访问无关。使用属性访问时,属性访问器方法必须是公共的或受保护的。

为什么不允许公共访问?


问题答案:

对于公共字段,将没有办法使代理可靠地工作-如果有人直接访问字段,那么持久性框架就没有简单的方法来拦截该调用并(例如)初始化包含对象(如果它是代理) 。

如果无法进行字段访问,则可以在代理对象上生成合成的getter方法,以拦截方法调用并执行任何必需的“幕后”工作。



 类似资料:
  • 问题内容: 我刚接触PHP,但是多年来我一直在使用类似的语言进行编程。我被以下内容弄糊涂了: 它产生了语法错误:这就是调用。 但这很好用: 碰了一会儿之后,我被告知您不能在默认属性中调用函数。你必须在做。我的问题是:为什么?这是“功能”还是草率的实现?有什么根据? 问题答案: 编译器代码建议这是设计使然,尽管我不知道其背后的官方原因是什么。我也不确定要可靠地实现此功能需要花费多少精力,但是目前完成

  • 假设我有一个非常简单的PHP CRUD系统来管理数据库。假设它有一个产品列表。使用Doctrine ORM,我想查询数据库并查看/编辑/添加记录。根据入门手册, 创建实体类时,所有字段都应该是受保护的或私有的(不是公共的),每个字段都有getter和setter方法(除了$id)。使用变异子可以让条令钩住调用,这些调用以一种如果直接使用entity#field=foo设置值就无法实现的方式操纵实体

  • 问题内容: 我正在研究python,尽管我认为我了解了Python的全部概念和概念,但今天我偶然发现了一段我不完全理解的代码: 假设我有一个本应定义Circles但缺少主体的类: 由于我尚未定义任何属性,因此该如何做: 奇怪的是,Python接受上述声明。我不明白为什么Python不会引发。我确实知道,通过 动态类型化, 我只是在需要时将变量绑定到对象,但是类中不应该存在允许我执行此操作的属性吗?

  • 问题内容: 我读了这个问题,并认为如果可以写的话,很容易解决(不是没有它就不能解决): 我不确定在很多情况下它是否有用,但是我想知道为什么它没有用,以及其他语言中是否存在类似的东西。 你们有什么感想? 编辑: 澄清一下:是的,我知道,这在Java中是不可能的,我也不是很想念它。这不是我期望的工作,并且惊讶于出现编译器错误。我只是有这个主意,喜欢讨论它。 问题答案: 它违反了封装。你不应该能够绕过父

  • 我们举个例子: 一个常见的解决方案是转移到一个抽象类,但是在我的具体案例中,我有一个枚举的接口,所以在这里不适用。我想这不是被忽略了,就是因为接口背后的原始想法,即它们是可用方法的“契约”,但我想我需要关于这是怎么回事的输入。 我读过“为什么Java 8接口方法中不允许使用”final“?”,其中说: 默认方法的基本思想是:它是具有默认实现的接口方法,派生类可以提供更具体的实现 与关联问题一样,由

  • 问题内容: 在什么情况下HTML页面包含具有重复ID属性的元素是 非法 的? 作为使用HTML已有多年经验的开发人员,我知道这样做的目的是元素ID 应该 是唯一的-我要问的是重复ID的实际负面影响。 当然,某些库中类似于getElementByID()的函数可能返回数组而不是单个元素,并且当开发人员未预期这种情况时,这可能会导致问题。但是,据我所知,此类功能将继续清晰地运行,它们并不是id重复项的