А в чем проблема ваша? вы же все себе правильно расписали.
Между soliditems и products связь many-to-one. Хибернейт умеет все это отлично организовывать.
Будете получать продукт просто и изящно аля soliditem.getProduct(). Я бы написал вам еще маппинг для классов, но боюсь не совсем понимаю вашу доменную модель.
Кроме того я бы вам посоветовал не запоминать цену на момент продажи, а сделать историчность цен продуктов. т.е. связь с продуктом, при изменении продукта - создается его копия, а старая версия со старой ценой помечается как deleted\notActual. так вы сохраните целостность данных.
На тему one-to-many можно почитать
тут или
тут