|
|
|
Hibernate annotations
|
|||
|---|---|---|---|
|
#18+
Есть проблема... В hibernate, когда для мэппинга используются его родные xml-конфиги, update Many-To-One ассоциации можно проводить с любой стороны. Т.е. если один класс содержит коллекцию дргих, то мы можем сказать entry.getSomeCollection().add(anotherEntry); и все прекрасно положится в базу. Если же мы пользуемся аннотациями, то по спецификации у нас всегда одна сторона ассоциации должна быть owning, а другая owned. И когда entry на owned side, при entry.getSomeCollection().add(anotherEntry) в базу ничего не ложиться. Самое интересное, что если проставить в аннотацию каскадинг на все, например так: @OneToMany(mappedBy="user", cascade=CascadeType.ALL) то записи в базу упадут, но foreign keys у них будут null. Собственно вопрос: можно ли при использовании аннотаций добиться первого варианта поведения??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2007, 21:21:13 |
|
||
|
Hibernate annotations
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток! А чем собственно говоря не устраивает мэппинг? Было много дискуссий по поводу аннотаций, и лично я считаю что лучше всего простой мэппинг ;-)... Можно попробовать сделать это следующим образом. Создать таблица и связать их ключами на уровне СУБД. А потом создать бизнесс объекты на базе этих таблиц используя например Оракловый TopLink (ejb3 ), NetBeans позволяет такое сделать... и посмотреть сами классы, по идеи аннотации должны все связи отследить.... Я болею за СКА РОСТОВ!!! Трепещи Москва, мы уже в первой лиге ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2007, 08:39:26 |
|
||
|
Hibernate annotations
|
|||
|---|---|---|---|
|
#18+
выглядит ооочень странно. по идее между xml и аннотациями разницы ну никакой. Делал нормальный проект на аннотациях - однако работало всё. по подробней отпишите ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2007, 10:32:45 |
|
||
|
Hibernate annotations
|
|||
|---|---|---|---|
|
#18+
У вас начальная посылка ложна (см http://www.hibernate.org/hib_docs/v3/reference/en/html/tutorial.html#tutorial-associations-usingbidir) т.е. во-первый hibernate сам не занимается установкой ссылок в обоих концах bi-directional ассоциаций , во-вторых то что в EJB3 называется owning и owned концами раньше обрабатывалось с помощью inverse атрибута ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2007, 11:41:39 |
|
||
|
Hibernate annotations
|
|||
|---|---|---|---|
|
#18+
funikovyuri +1 rusBob xml-маппинг имхо моветон уж лет как сто. из-за него люди начинают с xdocletнёй пучкаться - эт ваще жуть. разработка от DB тоже имхо жуткая тема. ибо собирать базу похреновее чем классы писать или umlить. Ну и к тому же я не могу припомнить на жабе дизайнер баз как в MSSQLе. поэтому аннотированные поджи имхо рулят ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2007, 11:56:49 |
|
||
|
Hibernate annotations
|
|||
|---|---|---|---|
|
#18+
Попробую описать проблему поподробнее, на тестовом примере. Есть два класса: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. После выполнения данного кода: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Мы получаем в базе следующее: Users ID | USER_NAME ---------------------- 1 | Kolumb Resources ID | RESOURCE_NAME | USER_ID ---------------------------------------- 2 | Big gun | null ---------------------------------------- 3 | Bullets | null Если же работать не с аннотациями, а с родным хибернейтовским мэппингом, выглядящим так: Для User: <hibernate-mapping package="hibtest"> <class name="User" table="users"> <id name="id" column="id" type="long"> <generator class="native"></generator> </id> <property name="name" column="name" type="string"></property> <set name="resources" table="resources" cascade="all,delete"> <key column="user_id"/> <one-to-many class="Resource"/> </set> </class> </hibernate-mapping> Для Resource: <hibernate-mapping package="hibtest"> <class name="Resource" table="resources"> <id name="id" column="id" type="long"> <generator class="native"></generator> </id> <property name="name" column="name" type="string"></property> <many-to-one name="user" class="User" column="user_id"/> </class> </hibernate-mapping> Тогда после ровно того-же кода, для работы с сущностями (ну за исключением того, что используется естественно не EntityManager, А родная Session), табличка Resources выглядит так: Resources ID | RESOURCE_NAME | USER_ID ---------------------------------------- 2 | Big gun | 1 ---------------------------------------- 3 | Bullets | 1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2007, 13:41:49 |
|
||
|
Hibernate annotations
|
|||
|---|---|---|---|
|
#18+
в мануалах написано однозначно: программер обязан поддерживать обе стороны ассоциации. я осмелюсь сомневаться в чистоте эксперимента с xml-mapping ом. ну и вот это Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2007, 13:52:04 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=34423093&tid=2146241]: |
0ms |
get settings: |
16ms |
get forum list: |
23ms |
check forum access: |
7ms |
check topic access: |
7ms |
track hit: |
52ms |
get topic data: |
20ms |
get forum data: |
5ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
| others: | 325ms |
| total: | 520ms |

| 0 / 0 |
