The fundamental problem is that you modelled you Java entities one-to-one as the ER looks like - a common mistake.
While n:m relations are always bidirectional in the relational model they don't have to be in Java - i.e if the getEvents() method should never be called it should not be modelled. If you are using tools to create entities from tables they typically make all relations bidirectional.
Remove the events collection. Write a service class that returns events for a user and a given time period (or a getEvents(start, end) method in the entity itself, but this means allowing it to access the persistence layer).
I've never won anything before. Not even a tiny ad:
RavenDB is an Open Source NoSQL Database that’s fully transactional (ACID) across your database