ну, я думаю, вам не следует называть свой идентификатор члена данных в MarketMenuBranch, поскольку это немного сбивает с толку. Я бы порекомендовал marketMenuBranch. Вот что это правильно?
Но если исходить из того, что у вас есть выше, вы просто ссылаетесь на имя участника класса, на которого вы ссылаетесь. Итак:
<many-to-one name="id" column="column_name" class="MarketMenuBranchId"/>
Вы просто указываете контейнерный объект, который вы создали и используете в качестве члена класса. MarketMenuBranchId также должен отображаться, и Hibernate будет знать, как получить идентификатор, и поэтому вам не нужно указывать id.marketId.
Кстати: я понятия не имею, правильна ли вся структура (это зависит от вас), но это должно ответить на ваш конкретный вопрос. Мне кажется, что ваш способ вызова XXXId немного вводит в заблуждение, но вы знаете свои потребности лучше, чем я.
edit: Я также хотел бы отметить, что если у вас вообще есть контроль над БД, я бы рекомендовал не использовать составные идентификаторы. В будущем все станет немного громоздко. И сгенерированный системой идентификатор лучше следует правилам нормализации.