A Java ORM for learning about ORMs, design patterns and UML