Ric*_*cha 90 java hibernate jpa
hibernate映射中的默认提取类型是什么?
探索之后我才知道的是:
但是在Eclipse中测试之后,它渴望所有人.
这取决于我使用的是JPA还是Hibernate?
小智 166
这取决于您使用的是JPA还是Hibernate.
根据JPA 2.0规范,默认值为:
OneToMany: LAZY
ManyToOne: EAGER
ManyToMany: LAZY
OneToOne: EAGER
Run Code Online (Sandbox Code Playgroud)
在休眠中,一切都是懒惰的
更新:
最新版本的Hibernate与上述JPA默认值一致.
Ale*_*ühl 50
我知道在提出这个问题时答案是正确的 - 但是由于人们(像我这一刻)仍然碰巧发现他们为什么他们的WildFly 10的表现不同,我想对当前的Hibernate 5进行更新. .x版本:
在Hibernate 5.2用户指南中,它在第11.2章中说明.应用获取策略:
Hibernate的建议是静态标记所有懒惰的关联,并使用动态提取策略进行渴望.遗憾的是,这与JPA规范不一致,该规范定义 了默认情况下应该急切地获取所有一对一和多对一关联.作为JPA提供者,Hibernate尊重该默认值.
因此,Hibernate的行为与上面针对JPA所述的Ashish Agarwal一样:
OneToMany: LAZY
ManyToOne: EAGER
ManyToMany: LAZY
OneToOne: EAGER
Run Code Online (Sandbox Code Playgroud)
(见JPA 2.1规范)
Jam*_*ENL 15
为了回答你的问题,Hibernate是JPA标准的一个实现.Hibernate有自己的操作怪癖,但根据Hibernate文档
默认情况下,Hibernate对集合使用延迟选择提取,对单值关联使用延迟代理提取.这些默认值对大多数应用程序中的大多数关联都有意义.
因此,无论您声明了什么类型的关系,Hibernate都将使用延迟提取策略加载任何对象.对于一对一或多对一关系中的单个对象,它将使用惰性代理(对于未初始化但不为空),以及当您尝试访问它时,它将使用值进行水合的空集合.
应该理解,除非您指定,否则Hibernate将仅在您尝试访问对象时尝试使用值填充这些对象 fetchType.EAGER.
| 归档时间: |
|
| 查看次数: |
88006 次 |
| 最近记录: |