在分离之前用JPA完全加载实体?

时间:2014-03-08 16:21:32

标签: java jpa entity lazy-evaluation eager

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

最自然的做法是在加载但仍在事务范围内(在分离之前)完全初始化此类实体。但我找不到怎么做。有没有简单的方法做这么琐碎的事情?我想留下JPA规范。

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

1 个答案:

答案 0 :(得分:1)

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

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

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

select e from SomeEntity e
left join fetch e.foos
left join fetch e.bar
where ...