【发布时间】:2015-04-17 12:35:51
【问题描述】:
我有以下 JPA 查询:
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...
其中主管 id 递归到同一张表的 id。问题是偶尔我会得到 p>
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
在接下来的 EL 调用中
#{employee.supervisor.last_name}
因为我使用的数据是只读的,会出现异常情况,例如员工的记录中有一个 supervisor_id,但这个employee_id 尚未插入系统或已从 Oracle 中过滤掉查看允许我将我的员工实体附加到。
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
我真正想要的是仍然获取 Employee 实体,但只是填充一个 Null 或 Empty Supervisor。
最初我在主管字段上用@NotFound(action = NotFoundAction.IGNORE) 注释了我的员工实体,但这导致实体管理器生成大量 SQL 调用,从而降低了应用程序的性能。 JPA/Hibernate Query Slow with too many queries
@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 调用?
【问题讨论】:
标签: hibernate jakarta-ee jpa entity