So I’ve just woken up to how hard it really is to do something like join fetch an @Any mapping. I got some distance with this by mapping the association @Any(fetch=LAZY), and then using a query like this:
select n, p from N n join P p on n.thing.id = p.id
And then as long as I remember to force-initialize n.thing before the tx ends, it essentially works. There’s three things wrong with this:
- it’s pretty verbose,
- I have to explicitly force-initialize the proxies, and
- if I switch to @Any(fetch=EAGER)(which is the default, ugh) then I start getting n+1 selects.
So, damn, it would sure be nice to be able to write things like:
select n, t from N n join n.thing t
select n from N n join fetch n.thing
select n, p from N n join treat(n.thing as P) p
select n from N n join fetch treat(n.thing as P)
But I would say the highest priority would be to simply fix the problem that fetch=EAGER automatically results in extra unnecessary selects. |