@Zhyki
Ничерта не понимаю

Как правильно отобразить содержимое бд в виде объектов?

Есть вот такие вот таблички.
d7dbce3e015946af9d649d9bdca98740.jpg
таблица solditems - список проданных товаров в 1 чеке. Так как основная информация о товаре хранится в products - записи из solditems ссылаются на product_id , а так же хранят количество предметов указанных в чеке и цену на момент продажи.
Мне нужно,что бы я мог посмотреть объект (предположим Check) в виде:
имя | ид | цена | на момент продажи | какиенибудьещеполя.

Hibernate сгенерировал entity для каждой таблицы и с просмотром данных из checks и solditems нет проблем. Вопрос в том,как сюда "прикрутить" данные из products.
На ум приходит только создать класс-обертку над несколькими entity, который будет хранить всё примерно так:
public class Check {
  private CheckEntity checkEntity; //информация из checks
  private List<Entry> entries = new ArrayList<Entry>();
  class Entry {
       SoldItemEntity soldItemEntity ; //информация из solditems 
       ProductEntity productEntity; // product entity из которой уже и брать имя и тд
  } 
}

И уже эту обертку собирать где нибудь...в checkDAO например.
Но я уверен,что есть какой то вариант проще и без велосипедов и надеюсь вы мне его подскажете.
  • Вопрос задан
  • 203 просмотра
Решения вопроса 1
@midikko
Java-ee + Android разработчик
А в чем проблема ваша? вы же все себе правильно расписали.

Между soliditems и products связь many-to-one. Хибернейт умеет все это отлично организовывать.

Будете получать продукт просто и изящно аля soliditem.getProduct(). Я бы написал вам еще маппинг для классов, но боюсь не совсем понимаю вашу доменную модель.

Кроме того я бы вам посоветовал не запоминать цену на момент продажи, а сделать историчность цен продуктов. т.е. связь с продуктом, при изменении продукта - создается его копия, а старая версия со старой ценой помечается как deleted\notActual. так вы сохраните целостность данных.

На тему one-to-many можно почитать тут или тут
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы