休眠中一对一、多对一和一对多的默认抓取类型

2022-08-31 08:07:21

休眠映射中的默认提取类型是什么?

探索后我所知道的是:

  • 对于一对一来说,它是渴望的
  • 对于一对多来说,这是懒惰的。

但是在Eclipse中测试了它之后,它渴望所有人。

这取决于我使用的是JPA还是休眠?


答案 1

这取决于您使用的是 JPA 还是 Hibernate。

JPA 2.0 规范中,默认值为:

OneToMany: LAZY
ManyToOne: EAGER
ManyToMany: LAZY
OneToOne: EAGER

在冬眠中,一切都是懒惰的

更新:

最新版本的Hibernate与上述JPA默认值一致。


答案 2

我知道在提出问题时答案是正确的 - 但是由于人们(这分钟像我一样)仍然碰巧发现他们想知道为什么他们的WildFly 10行为不同,我想为当前的Hibernate 5.x版本提供更新:

《休眠 5.2 用户指南》中,第 11.2 章对此进行了说明。应用抓取策略

Hibernate 建议静态地将所有关联标记为懒惰,并使用动态提取策略来表示渴望。不幸的是,这与JPA规范不一致,JPA规范定义了默认情况下应该热切地获取所有一对一和多对一关联。Hibernate 作为 JPA 提供程序,遵循该默认值。

因此,Hibernate的行为也像Ashish Agarwal上面为JPA所说的那样:

OneToMany: LAZY
ManyToOne: EAGER
ManyToMany: LAZY
OneToOne: EAGER

(参见 JPA 2.1 规范)


推荐