相关疑难解决方法(0)

使OneToOne关系变得懒惰

在我们正在开发的这个应用程序中,我们注意到一个视图特别慢.我分析了视图并注意到hibernate执行了一个查询,即使数据库中只有两个对象要获取,也需要10秒.所有OneToManyManyToMany关系都是懒惰的,所以这不是问题.在检查正在执行的SQL时,我注意到查询中有超过80个连接.

进一步检查这个问题,我注意到问题是由实体类的深层次结构OneToOneManyToOne关系引起的.所以,我想,我只是让他们变得懒惰,这应该解决问题.但是,无论是标注@OneToOne(fetch=FetchType.LAZY)@ManyToOne(fetch=FetchType.LAZY)似乎不工作.我得到一个异常,或者它们实际上并没有被代理对象替换,因此是懒惰的.

任何想法我将如何让这个工作?请注意,我不使用persistence.xml定义关系或配置细节,一切都在java代码中完成.

java hibernate jpa

203
推荐指数
6
解决办法
10万
查看次数

JPA 2 CriteriaQuery中的FetchMode

我目前正处于从Hibernate切换到纯JPA 2的过程中(顺便说一下,这比我最初期望的要长得多).
到目前为止,我遇到的最大问题是找到一种方法来强制加载懒惰属性.
使用Hibernate,这是使用:criteria.setFetchMode("person", FetchMode.JOIN);.
有没有办法用JPA 2做到这一点?

jpa-2.0

12
推荐指数
1
解决办法
1万
查看次数

与共享主键的OneToOne关系生成n + 1个选择; 任何解决方法?

想象一下关系数据库中的2个表,例如Person和Billing.在这些实体之间定义了(非强制性)OneToOne关联,并且它们共享Person主键(即PERSON_ID在Person和Billing中定义,并且它是后者中的外键).

通过命名查询对Person进行选择时,例如:

from Person p where p.id = :id
Run Code Online (Sandbox Code Playgroud)

Hibernate/JPA生成两个选择查询,一个在Person表上,另一个在Billing表上.

上面的示例非常简单,并且不会导致任何性能问题,因为查询只返回一个结果.现在,假设PersonnOneToOne关系(均非强制性)与其他实体(所有共享Person主键).

如果我错了,请纠正我,但是select在Person上运行查询,返回r行,将导致(n+1)*rHibernate生成选择,即使这些关联是懒惰的.

是否存在针对此潜在性能灾难的解决方法(除了根本不使用共享主键)?谢谢你的所有想法.

java hibernate jpa

7
推荐指数
1
解决办法
5091
查看次数

标签 统计

hibernate ×2

java ×2

jpa ×2

jpa-2.0 ×1