2012-04-13 1 views
1

У меня есть свойство String объекта, которое часто повторяется другими объектами, которые будут (в традиционных базах данных) сопоставляться со своей собственной таблицей.Нормализовать повторяющиеся значения в Hibernate - Java

Например: я мог иметь предмет одежды, каждый предмет одежды имел свой собственный объект или ряд. Каждый товар будет иметь бренд, но этот бренд (String) можно повторить многими другими предметами одежды. - по сути, это должно быть многозначное сопоставление, хотя бренд не является сущностью по отдельности, а просто строкой.

Как бы это сделать в спящем режиме? Или мне лучше создать сущность для каждой марки и использовать ManyToOne?

Любая помощь будет оценена!

ответ

1

Я думаю, что только с точки зрения database normalization (в частности, 3NF), если вы ожидаете, что столбец будет иметь повторяющиеся значения, вы должны экспортировать эти значения в свою собственную таблицу и иметь столбец внешнего ключа. Таким образом, если одно из этих значений изменилось, вы можете сразу их изменить.

Это позволит вам использовать ManyToOne в Hibernate.

Однако, если это невозможно, я бы рекомендовал использовать Enum.

+0

Если вы перейдете с перечислением, вам придется обновлять свой код каждый раз, когда вы добавляете новый бренд. Предоставление бренда собственной сущности может иметь больше смысла. –

+0

Что говорит «ɲeuroburɳ», верно, Enums - не лучший вариант. На данный момент я буду использовать ManyToOne, хотя я надеялся на какое-то решение, связанное с объектом типа value (embeddable), встроенным в объект. – user1260191

+0

Я бы согласился на перечисления. Нормализация самой базы данных - намного лучший вариант. Я также думал о внедренных объектах, но, похоже, это не очень применимо к вашей проблеме. [Embedded entites] (http://schuchert.wikispaces.com/JPA+Tutorial+1+-+Embedded+Entity) предназначены для обработки нескольких столбцов, как если бы они были отдельным объектом, хранящимся охватывающим объектом. На самом деле это не то, о чем вы просите. –