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

Hibernate中的自然标识符是什么?

徐新荣
2023-03-14
问题内容

在阅读Hibernate文档时,我不断看到对 自然标识符 概念的引用。

这是否仅表示实体因其拥有的数据的性质而具有的ID?

例如,用户名+密码+年龄+某些内容用作复合标识符?


问题答案:

在Hibernate中,自然键通常用于查找。在大多数情况下,您将拥有一个自动生成的代理ID。但是,此ID对于查找而言毫无用处,因为您将始终通过名称,社会保险号或其他来自现实世界的字段进行查询。

在使用Hibernate的缓存功能时,这一区别非常重要:如果缓存是由您的主键(代理ID)索引的,则查找不会获得任何性能提升。这就是为什么您可以定义一组要使用自然ID查询数据库的字段的原因。然后,Hibernate可以通过您的自然键为数据建立索引并提高查找性能。

有关更详细的说明,请参见这篇出色的博客文章;有关Hibernate映射文件的示例,请参见RedHat页面。



 类似资料:
  • 问题内容: 我收到的时候我想改变我的以下异常中的。 我知道我要更改表中的主键。我正在使用JPA注释。 我通过使用以下单个HQL查询解决了此问题: 而不是使用更多的OO方法: 知道差异是什么吗? 问题答案: 我无法想象你为什么要这么做。完全没有 您为什么要更改实体的身份?您还需要更新指向它的其他表中的所有外键。似乎很痛苦,没有收获。您最好将其设置为“业务密钥”(普通属性),并使用更永久的代理密钥。我

  • 我遇到过许多用单撇号表示的Rust类型: 那个撇号的意义是什么?可能是引用的修饰符(

  • 问题内容: 我陷入了这个问题。数据库架构是由其他人提供的,因此我不能简单地更改名称。我尝试在各处添加适当的注释,也许我遗漏了一些(显而易见的)? 这是我的完整映射(很多类),我将省略getter / setter。 问题是当hibernate试图获得全部 控制规则 ControlRuleAttrib ControleRuleAttribPK 这里的问题是,是否有可能以某种方式得到实体的?如您所见,

  • 问题内容: 我正在检查一些功能,并在网站上浏览了一些看起来很有趣的代码: 作为匿名函数的例子之一。 有人知道吗?有文件吗?而且看起来很邪恶,应该使用它吗? 问题答案: 这就是PHP表示闭包的方式。这根本不是邪恶的,实际上它是强大而有用的。 基本上,这意味着您要允许匿名函数在其作用域之外“捕获”局部变量(在这种情况下为),并将其值(或在引用其自身的情况下)保留为内部状态匿名函数本身。

  • 我在以下实体中有一个双向的@OneToMany / @ManyToOne关系: 假设最初有一个没有项目的包,当我试图通过其Id<code>packageRepository获取包时,将项目添加到该包中。findOne(packageId)(Spring-Data-JPA-code),我在那一行得到了下面的错误。 我认为Hibernate尝试了一个左外部联接,并发现itemId(ItemItemen

  • 问题内容: 我想建立一个Python函数来计算 并想命名我的求和函数Σ。以类似的方式,想将Π用于产品,依此类推。我想知道是否有一种以这种方式命名python函数的方法? 也就是说,Python是否支持unicode标识符,如果支持,有人可以提供示例吗? 谢谢! 最初的动机是我今天看到的一段Clojure代码, 其中Σ是定义为的宏, 我觉得那很酷。 顺便说一句,要解决一些关于可读性的评论-例如,使用