У меня есть вопрос, который больше относится к дизайну, чем к реализации.
Я также рад, что кто-то укажет ресурсы для ответа, и я с радостью
исследование для себя.
Очень упрощенный Java и SQL:
Допустим, у меня есть бизнес-домен POJO под названием 'Picture' с тремя атрибутами.
class Picture
int idPicture
String fileName
long size
Допустим, у меня есть еще один бизнес-домен POJO под названием "Item" с 3 атрибутами
class Item
int idItem
String itemName
ArrayList<Picture> itemPictures
Это были бы нормальные простые отношения. Вы могли бы сказать, что объект «Изображение», будет
никогда не существовать вне объекта «Предмет». Предположим, что изображение относится только к определенному элементу, но
что предмет может иметь несколько картинок
Теперь - используя хороший дизайн базы данных (3-я нормальная форма), мы знаем, что мы должны поместить элементы и
картинки в собственных таблицах. Вот что, я полагаю, будет правильным.
table Item
int idItem (primary key)
String itemName
table Picture
int idPicture (primary key)
varchar(45) fileName
long size
int idItem (foreign key)
Вот мой вопрос:
Если вы делаете файлы отображения Hibernate для этих объектов. В дизайне данных ваш
Таблице рисунков нужен столбец для ссылки на элемент, так что отношение внешнего ключа может быть
поддерживается.
Однако в объектах вашего бизнес-домена - ваш объект Picture не содержит
ссылка / атрибут на idItem элемента - и не нужно знать это. Экземпляр java Picture всегда
создается внутри экземпляра Item. Если вы хотите узнать предмет, которому принадлежит изображение
Вам уже в правильном объеме. Вызовите myItem.getIdItem () и myItem.getItemPictures (), и у вас есть две части информации, которые вам нужны.
Я знаю, что инструменты Hibernate имеют генератор, который может автоматически заставить ваши POJO смотреть
в вашей базе данных.
Моя проблема связана с тем, что я спланировал дизайн данных для этого
эксперимент / проект в первую очередь. Затем, когда я пошел, чтобы сделать объекты Java домена, я понял, что
хороший дизайн продиктовал, что объекты содержат другие объекты вложенным способом. Это очевидно
отличается от того, как схема базы данных - где все объекты (таблицы) являются плоскими и
не содержат никаких других сложных типов в них. Какой хороший способ примирить это?
Не могли бы вы:
(A) Создайте файлы отображения гибернации, чтобы Picture.hbm.xml имел отображение в POJO
Поле idItem родителя (если это возможно)
(B) Добавьте атрибут int в класс Picture для ссылки на idItem и установите его в экземпляре, упрощая таким образом файл отображения hbm.xml, имея все поля таблицы в качестве локальных атрибутов в классе
(C) Исправить структуру базы данных, потому что она неправильная, придурок.
Буду очень признателен за любые отзывы