I would recomend coding this with a session bean. If it is a lot of data and it needs to be very fast, you may have to go directly to the database, but I would recomend coding the session bean first. This way you can figgure out exactally what data you need and then only if it is not fast enough recode it with direct database access. This will also give you something to test your direct access dabase code against.
It has always been difficult to access data from lots of tables.
As a side note, the newest JBossCMP code supports readahead across cmr fields.