我需要对实体进行一些处理。我希望它在交易之外。问题是这个实体包含一些延迟加载的字段,因此我的程序因为没有激活会话而无法访问其中的一些。
最自然的做法是在加载但仍在事务范围内(在分离之前)完全初始化此类实体。但我找不到怎么做。有没有简单的方法做这么琐碎的事情?我想留下JPA规范。
由于某些原因,在jpql中获取所有属性都不起作用。
答案 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 ...