You can use max_fetch_depth, but that doesn't seem to affect explicit join fetches. Works great on select fetches though.
Using only HQL, you'd be better off adopting the opposite approach. Set up your mapping to always lazily load, then have different queries to override this setting using join fetch, when appropriate. So if you wanted just A and B, you'd have
Code:
select a from A a join fetch a.B b
That would eagerly load A and B, and lazily load everything else. For a full eager load, use a different query
Code:
select a from A a
join fetch a.B b
join fetch b.C c
join fetch c.D d
join fetch d.E
That would eagerly load the entire graph.