Somebody accidentally deleted this post, so I'm reposting it for other people who have this same problem:
For anybody who stumbles on this thread and wants to know how we finally solved this issue, this is how we did it:
Background:
At the time this was written our company was using the Play Framework version 2.1.3 and whichever version of Ebean was bundled by default with that version. We were happy enough with Ebean until this particular snag. To be fair, this was my first time working with an ORM, so I had no frame of reference with which to judge Ebean. I've always been a code geek by nature, so I've always gravitated to using raw JDBC and ad-hoc object mapping in the past. When we first started using Play, I was intrigued by the prospect of having a well-integrated ORM that handled some of the more mundane bits for us. We have always operated under tight deadlines, so we welcome anything like this that can save us time. We had hit a few other bumps along the way with Ebean, but we were usually able to creatively work our way around those other issues. When we hit this issue, however, it cost us enough time that we started wondering if Ebean's magic was worth it. I accept that we might not have tried every last approach to making this type of join work, but I feel like we did our due diligence and tried everything within reason (including many iterations you don't see in this thread).
Discovery of the solution:
While searching for alternatives we read a post about the upcoming release of Play Framework 2.3. According to the Play 2.x Roadmap, it seems that Play will be switching to JPA from Ebean. I haven't seen the rationale behind Typesafe's decision, but I trust that they have their reasons. With this forthcoming change in mind, I looked around to see if JPA/Hibernate could handle LEFT exception joins (or even more fundamentally allow us to control whether a given join is an inner or a left outer join). I was pleased to see from various sources that JPA 2 should handles this. It was also clear from Play's current documentation that there should be no issues getting Hibernate up and running.
Results:
Over the course of this past week I've put in some crazy hours switching our entire project over to Hibernate 4.2.5/JPA2. I couldn't be happier with this decision. With JPA, I finally feel like I have the power to make decisions about how my queries operate. Most importantly, the left exception join scenario works flawlessly. I'm still running through all of our test cases, but everything is working great at the moment.
Tips:
A smooth conversion with minimal code rewriting required a few tricks that you might find helpful.
Jadira is useful for Joda DateTime persistence / serialization (and there are some other options if you don't like that one)
Hibernate's ImprovedNamingStrategy to handle the camelCase conversion
The expected @play.db.jpa.Transactional annotations in our controller classes
If you use Eclipse, you might need to swap out the Play Ebean jar for the Play JPA jar in your library
There were, of course, a few other tweaks to the code to complete the switch, but most of that is well-documented.
Look at the Play JPA sample code as a guide:
I hope this helps!
All the best,
Sam