SELECT emp FROM Employee emp LEFT JOIN FETCH emp.supervisor WHERE emp.supervisor_id = :id_number
employee_ id, first_name, last_name, supervisor_id
1, jeff, jones, 2
2, bob, smith, 3
etc...
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
#{employee.supervisor.last_name}
employee_ id, first_name, last_name, supervisor_id
4, jane, dean, 9999
where employee_id 9999 doesn't exist in my read-only data feed
最初,我在supervisor字段上用@NotFound(action=NotFoundAction.Ignore)
注释了我的Employee实体,但这导致实体管理器生成大量SQL调用,从而降低了应用程序的性能。JPA/Hibernate查询速度慢,查询太多
@Entity
Employee
@OneToOne(fetch = FetchType.LAZY)
//Removed @NotFound(action = NotFoundAction.IGNORE)
@JoinColumn(name = "supervisor_id", insertable = false, updatable = false)
private Employee supervisor;
是我的Employee实体上缺少了一些将填充空主管的构造函数,还是对我的查询进行了一些修改,将像注释那样执行Ignore
,而不需要大量的单独SQL调用?
解决方案是使用专有注释禁用惰性关系的代理:
@org.hibernate.annotations.LazyToOne(LazyToOneOption.NO_PROXY)
在此之后,惰性左联接提取开始使用null表示不出现联接,而不是惰性代理。
有一个HACK可以禁用所有*toone惰性字段:
> 我想在一次调用“Select P from Parent left join fetch P.children where P.id=:id”中获得一个包含所有子对象的父对象(我认为它是一个left outer join)。这只会在P至少有一个子对象时才会产生结果 我想也有所有的儿童和财产childinfos与1调用,因为jpa不支持导航p.children.childinfo,有没有办法实现
问题内容: 这是我的namedquery: @NamedQuery(name =“ User.findOneWithLists”,查询=“从用户u中选择u” +“左联接FEACH u.aTemplates” +“左联接FE.bTemplates” +“左联接FE.bp” +“左JOIN FETCH u.aCredentials“ +” LEFT JOIN FETCH u.st(st.deleted
问题内容: 我们有下面的查询。使用LEFT OUTER联接需要9秒钟才能执行。将LEFT OUTER更改为LEFT INNER可以将执行时间减少到2秒,并且返回 相同 数量的行。由于正在处理dbo.Accepts表中相同数量的行,而不论联接类型如何,为什么外层要花3倍的时间? 问题答案: 返回相同行数的事实是事后事实,查询优化器无法预先知道Accepts中的每一行在Marker中都有匹配的行,可以
我正在尝试JPA2.1(eclipselink)中的“treat as”函数,但遇到了一个来自JPA的错误: 异常说明:ReportQuery结果大小不匹配。应为[263],但已检索到[197] 下面是我的JPQL查询(我更改了一些部分,以便更明确): 我们可以看到account和ad_account之间的左外部连接。此外,ad_account表不存在于select子句中。(idApp字段是主键的
我需要从Rest控件获取一个实体及其集合,但我对spring data JPA有一个非常奇怪的行为。 我对带有懒惰加载的实体有一种莫名其妙的关系。