Ern*_*nio 1 java hibernate jpa
我将 Spring 与 JPA (Hibernate) 一起使用。
当我从许多网站学习有关关系的内容时(实现它们的方法很少),也有关于获取类型的讨论,但我在这里提出的问题从未得到完全解答。
我想知道是否存在双向关系不能偷懒的情况?单向有时也不能偷懒吗?
Box举例来说:假设一个 中有多个es Warehouse。鉴于这是 ManyToOne 关系(如上所述,实现它的方法很少,为了这个例子,我们假设Warehouse是拥有方) - 它可以在两端都是惰性的(你可以 loadBox和 lazily Warehouse,但加载Warehouse不会加载所有Boxes 它)有,只有当你真正得到它们时)?
这样的代码片段看起来怎么样——我是否只是用 JPA 的 LAZY 注释两端,或者其他一些,也许是 Hibernate 特定的东西?
所有关系都可以是惰性的,Hibernate 文档中建议将所有关系标记为惰性:http://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html#fetching-strategies
Hibernate 建议静态地将所有关联标记为惰性,并使用动态获取策略来实现急切。不幸的是,这与 JPA 规范不一致,JPA 规范定义默认情况下应立即获取所有一对一和多对一关联。Hibernate 作为 JPA 提供者,遵循该默认设置。
您只需将关系双方标记为懒惰:
@OneToMany(mappedBy = "...", fetch = FetchType.LAZY)
@OneToOne(fetch = FetchType.LAZY)
@ManyToOne(fetch = FetchType.LAZY)
Run Code Online (Sandbox Code Playgroud)
映射的默认值(如果您不指定fetch)为:
OneToMany: LAZY
ManyToOne: EAGER
ManyToMany: LAZY
OneToOne: EAGER
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1135 次 |
| 最近记录: |