Walk Fetchables for a container width-first rather than depth-first

Description

Walking depth-first can lead to cases where we inadvertently skip join fetching associations because we have already processed the "same" AssociationKey relative to a separate path branch.

See `org.hibernate.orm.test.sql.exec.onetoone.bidirectional.EntityWithBidirectionalOneToOneTest#testGetMother` , `#testGetAdoptedChild` and `#testHqlSelectMother` for examples. These fail after the changes for https://hibernate.atlassian.net/browse/HHH-14398 because we now walk the attributes in a different order. Previously it just "happened" to work.

One real solution would be to walk the fetchables width first. I.e....

```
Mother.adopted
Mother.biologicalChild
Mother.adopted.biologicalMother
Mother.adopted.stepMother
Mother.adopted.biologicalMother.adopted
Mother.adopted.biologicalMother.biologicalChild
Mother.adopted.stepMother.adopted
Mother.adopted.stepMother.biologicalChild
Mother.biologicalChild.mother
...
```

The point being to give higher precedence to the paths "closer" to the root

Environment

None

Assignee

Unassigned

Reporter

Steve Ebersole

Fix versions

backPortable

None

Suitable for new contributors

None

Requires Release Note

None

Pull Request

None

backportDecision

None

Priority

Major
Configure