Resolution: Efficient Querying
Well, I already covered how you can handle this challenge several times in the past, so I’ll not do that again. What I actually did is quite different. Instead of having to deal with the complexity (which is possible) I decided to remove it entirely.
The solution to my problem is to simplify the model:
Which is represented as the following physical data model:
Now, querying for this is about as simple as you can get:
select user0_.Id as Id2_0_,
book2_.Id as Id0_1_,
user0_.Name as Name2_0_,
user0_.Street as Street2_0_,
user0_.Country as Country2_0_,
user0_.City as City2_0_,
user0_.ZipCode as ZipCode2_0_,
user0_.HouseNumber as HouseNum7_2_0_,
book2_.Name as Name0_1_,
book2_.ImageUrl as ImageUrl0_1_,
book2_.Image as Image0_1_,
book2_.Author as Author0_1_,
queue1_.[User] as User1_0__,
queue1_.Book as Book0__,
queue1_.[Index] as Index3_0__
from Users user0_
inner join UsersWaitingBooks queue1_
on user0_.Id = queue1_.[User]
inner join Books book2_
on queue1_.Book = book2_.Id
where user0_.Id = 1 /* @p0 */
De-normalizing the model has significantly improved my ability to work with it.