| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Hibernate many-to-many + свойства связи |
| Автор: 3x15 9.10.2007, 15:30 | ||
| Здравствуйте! Реляционные БД имеют конкретные решения для каждого случая. Было бы правильно описать все случаи в HIBERNATE. И можно было бы проще все решать. А сучай такой. Есть таблица - в ней записи связаны друг с другом many-to-many. Это пример иерархии в которой один элемент может быть в однум случае главным в другом зависимым, при этом не один раз. В реляционных БД решение это отдельная таблица "field_field" типа: id | id_parent | id_chield Все красиво ложится в Hiber:
и даже работает!!! Но важно еще описать каждую связь определнными свойствами, т.е. добавить поля в таблицу "field_field". Например, порядковый номер, описание. Получится: id | id_parent | id_chield | number | description И внимаение вопрос! Как описать эти свойства в HIBERNATE? Можно отдельной сущностью, но это не красиво и затратно по коду, должно быть готовое, красивое решение, т.к. задача стандартная... Спасибо... |
| Автор: 3x15 15.10.2007, 15:33 | ||||
| Здравствуйте! Да в яве надо писать отдельный класс. Но если его отмапить в Хибернэйт, то невозможно будет делать операции с изменениями (например, вставка новых связей), т.к. Хибернэйт просит поставить update="false" insert="false". Т.е. все что уже есть в базе красиво мапится и извлекается, но новую связь организовать не могу. В ФАК-ах по Хибернэйту такой случа рассматривается: I have a many-to-many association between two tables, but the association table has some extra columns (apart from the foreign keys). What kind of mapping should I use? Use a composite-element to model the association table. For example, given the following association table:
you could use this collection mapping (inside the mapping for class Foo):
You may also use an <idbag> with a surrogate key column for the collection table. This would allow you to have nullable columns. An alternative approach is to simply map the association table as a normal entity class with two bidirectional one-to-many associations. Но в этом варианте тоже не могу создать новую свзяь. И перед тем как выдать ошибку он сначала удалет все существующие связи у главного узла, затем их снова восстанавливает, короче что-то не так. Проблема не решена... :( |
| Автор: mindflyer 16.10.2007, 15:57 | ||||
ИМХО, стандартное решение - это именно отдельная сущность в базе данных. У тебя в java - три класса, в базе данных - три таблицы. Ты хочешь сделать маппинг трёх классов на три таблицы через две сущности hibernate? Зачем так усложнять? Чего ты хочешь добиться? Добавлено через 1 минуту и 49 секунд
Что значит не можешь организовать? |
| Автор: 3x15 17.10.2007, 09:59 | ||
| Здравствуйте! Заработало, до концпа сам не понял... Всего две таблицы. Все связи, описанные во второй таблице вяжут записи первой таблицы. Всего 2 класса в яве. для первой таблице и для второй. Вот как это выглядит в Хибернэйте:
Вот все мое непонимание было как можно создать запись в hS если стоит insert="false" update="false" Оказывается можно Добавлено через 1 минуту и 45 секунд И еще непонимаение было в том, что в моем случае это не связь много ко многим... |