0

我需要对实体进行一些处理。我希望它在交易之外。问题是这个实体包含一些延迟加载的字段,因此我的程序无法访问其中的一些字段,因为会话没有处于活动状态。

最自然的做法是在加载后完全初始化此类实体,但仍处于事务范围内(在分离之前)。但我找不到如何做到这一点。难道真的没有简单的方法来做这样一件小事吗?我想留在 JPA 规范后面。

由于某种原因,在 jpql 中获取所有属性不起作用。

4

1 回答 1

1

只需在要初始化的惰性代理上调用一个方法:

SomeEntity e = ...;
e.getFoos().size(); // now foos is initialized
e.getBar().getName(); // now bar is initialized

要使用 JPQL 一次加载整个状态,您需要使用 fetch joins:

select e from SomeEntity e
left join fetch e.foos
left join fetch e.bar
where ...
于 2014-03-08T16:36:38.800 回答