kboom
kboom

Reputation: 2339

Fully load entity with JPA before detaching it?

I need to do some processing on an Entity. I'd like it to be outside a transaction. The thing is this entity contains some lazy-loaded fields so that my program fails on accessing some of them because of not having a session active.

The most natural thing to do would be to fully initialize such entity once it's loaded but still in transactional scope (before detaching it). But I can't find how to do that. Is there really no simple method do such a trivial thing? I'd like to stay behind JPA spec.

For some reason fetch all properties in jpql does not work.

Upvotes: 0

Views: 685

Answers (1)

JB Nizet
JB Nizet

Reputation: 691735

Just call a method on the lazy proxies you want to initialize:

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

To load the whole state at once using JPQL, you need to use fetch joins:

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

Upvotes: 1

Related Questions