Я думаю, что очень важно четко идентифицировать ваши сущности и отношения между ними, поскольку они представляют ваше представление в мире Java о реальной проблеме в мире доменов. Убедитесь, что у ваших организаций есть корреспондент в деловом плане. Фактически, это целая проблема с несколькими подходами (например, DDD).
После того, как сущности будут четко определены, вы должны также рассмотреть, какова основная цель вашего приложения. Основываясь на этом, вы можете отобразить его по-другому в режиме гибернации.
Например, уровень сохраняемости, оптимизированный для чтения, может использовать менее нормализованную структуру БД, где небольшая избыточность может дать вам дополнительную скорость. В терминах Hibernate это означает выбор подходящего отображения наследования Hiberante для вашей иерархии объектов (если он у вас есть) или, возможно, использование выборочных объединений для массового чтения. Коллекции с отложенной загрузкой также могут помочь, но, опять же, это можно сделать после того, как вы определили свои сущности.
Еще одна важная вещь, которую я думаю определить, это то, какие сущности являются агрегатными, иными словами, те, которые имеют четкую идентичность, свой жизненный цикл, который указывает, к каким сущностям вы явно запросите. Другие (их зависимости) обычно управляются посредством каскадирования операций.
Сохраняйте отношения между сущностями простыми, избегайте двунаправленных связей, если это возможно.
Не уверен, что этот пост действительно вам нужен - суть в том, чтобы, по крайней мере, для начинающего, начать с классов, сделать его простым (однонаправленным) и убедиться, что вы не отображаете вещи без бизнеса Смысл, если вы действительно - действительно должны!