|
|
|
никак не въеду: EJB3 - связи между таблицами в коде - плиз хелп
|
|||
|---|---|---|---|
|
#18+
Ребят, помогите плиз... Перешёл в книжке "Manning - Ejb 3 In Action" к главе об аннотациях @OneToOne, @OneToMany и т.д. В купе с аннотацией @SecondaryTable я уже вообще ничего не понимаю... Собственно, вопрос: есть у меня в базе(MS SQL 2K) две таблицы - Employees и Jobs. Первая описывает рабочих, вторая их работы(до текущей). SQL выглядит так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. У каждого работника может быть более одного рабочего места в прошлом(ну, сменил с десяток работ, к примеру, пока пришёл на текущую), но у одной "работы" может быть только один рабочий. Значит, отношение таблицы t_employees к t_jobs есть "один ко многим". В коде я описал данные таблицы в виде Entity Bean'ов, как: Код: 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. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. Вот. НО, самое главное - что использовать для описания связей между этими двумя таблицами - я ума не приложу... Честно, читаю книжку и не понимаю как это использовать. Как указать, что поле employeeId в бине Job является Foreign Key для бина Employee? У кого-то есть опыт написания такого кода? Кто как пишет? Подскажите новичку, я только разбираюсь с EJB, хотелось бы вникнуть... И второй вопрос, тоже, может, кто знает... как в бине Employee указать, что militarySpecial является 1 по умолчанию, как добавить CONSTRAINT в бине? Видимо, как-то в аннотации @Table, с помощью UniqueConstraint, но как конкретно? Огромное спасибо заранее. P.S.: на самом деле полей в таблицах больше, но они без связей, поэтому я их не включал сюда, дабы сэкономить место. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2007, 23:13:38 |
|
||
|
никак не въеду: EJB3 - связи между таблицами в коде - плиз хелп
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2007, 09:20:59 |
|
||
|
никак не въеду: EJB3 - связи между таблицами в коде - плиз хелп
|
|||
|---|---|---|---|
|
#18+
Спасибо большое, параллельно чтению литературы буду пробовать! Ещё вопрос возник... А как добавлять эти две ентити в базу? По идее, создавать несколько Jobs, потом создать один Employee, кинуть Jobs в список к Employee(пока ещё не вызывая persist ни у того, ни у другого), а потом em.persist(Employee) ? Ещё раз спасибо! P.S.: Обо всём этом я ещё прочитаю, т.к. читаю две книжки. Но дело в том, что задачу нужно выполнить сейчас, поэтому и пытаюсь быстро разобраться, а затем уже "догонять" по книжке. Просто, читая книгу, я не успею всё реализовать... Спасибо за понимание. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2007, 22:22:06 |
|
||
|
никак не въеду: EJB3 - связи между таблицами в коде - плиз хелп
|
|||
|---|---|---|---|
|
#18+
Да... и ещё один вопрос... В связи с тем, что у Job появился private Employee emp; нужен ли ещё private int employeeId; ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2007, 22:34:03 |
|
||
|
никак не въеду: EJB3 - связи между таблицами в коде - плиз хелп
|
|||
|---|---|---|---|
|
#18+
Сделал тут как посоветовали. Пришлось убрать обьявление поля t_employee_id из бина Job, потому что ругался JBoss. Ну в общем, если честно, то я не понимаю, зачем нужны эти аннотации, потому как по-любому добавлять нужно всё в отдельности. Даже если я создаю Employee, инициализирую его данными, потом создаю список Jobs(предварительно каждый проинициализировав), заношу их в БД(persist'ом), затем кидаю их в список и присваиваю списку из Employee, добавляя затем сам Employee(persist'ом), это ничего не меняет. В том плане, что у каждого из этих Job в базе в столбце "t_employee_id" стоит NULL. Странно, скорее всего, конечно, я чего-то недопонял... но буду пробовать ещё. (то, что нужно читать доки я в курсе, это и делаю, но... выше объяснил) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2007, 01:29:53 |
|
||
|
никак не въеду: EJB3 - связи между таблицами в коде - плиз хелп
|
|||
|---|---|---|---|
|
#18+
Все-таки совет прочитать все до конца, а не лезть вперед паровоза - ничего хорошего из этого не выйдет... Что касается persist-ов у Employee и Job: Создали Employee -> проинициализировали его атрибуты -> Создали несколько Job-ов -> присвоили каждому из них Employee emp -> добавили их в список jobList, созданного на первом этапе Employee -> и сказали employee.persist(); P.S. Это конечно сработает, если Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2007, 09:24:16 |
|
||
|
никак не въеду: EJB3 - связи между таблицами в коде - плиз хелп
|
|||
|---|---|---|---|
|
#18+
Ещё раз большое спасибо. Конечно, буду читать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2007, 17:09:10 |
|
||
|
никак не въеду: EJB3 - связи между таблицами в коде - плиз хелп
|
|||
|---|---|---|---|
|
#18+
Ещё раз благодарю за помощь, предыдущие примеры сработали на "ура". Только, вот, при тех же связях в Entity бинах, почему-то не получается получить employee, у которого бы сразу был бы список всех job. Хотя, связи есть... Не подскажете, может, как-то по-особенному брать надо? Я сейчас делаю так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Ну и дальше использую список. Т.е. выбираю записи с помощью JPQL. Надеялся, что это поможет выбрать не только всех рабочих, но и заполнить их список jobList у каждого из элементов списка list, что в листинге выше. Но последнего не происходит :( Заранее спасибо за помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2007, 01:18:45 |
|
||
|
никак не въеду: EJB3 - связи между таблицами в коде - плиз хелп
|
|||
|---|---|---|---|
|
#18+
неясно, что неясно .... 1. если jobList.isEmpty() то наверно в базе так и есть. и проблемы в сохранении объектов 2. если тебя возмущает SQL запросы при навигации по этим коллекциям, то надо использовать слово fetch в запросе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2007, 12:10:18 |
|
||
|
никак не въеду: EJB3 - связи между таблицами в коде - плиз хелп
|
|||
|---|---|---|---|
|
#18+
exppнеясно, что неясно .... Хм.. ну неясно следующее: почему при существующих(прописанных аннотациями) связях между entity bean'ами, при добавлении только лишь employee(со списком job'ов), в базу ложатся и работник, и его работы. А при изъятии из базы всех записей employee, списки jobList у них не заполняются, как-будто в базе нет связанных с ними работ. Но на самом-то деле они есть и занесены были перед изъятием. Вот и спрашиваю, может, запрос как-то по-другому надо определять? Но с другой стороны, хибер видит, что есть у employee свойство jobList типа List<Job>, что связано оно с таблицей работ. Почему бы не заполнить? (Не исключено, что я ещё какой-то мелочи не знаю просто) expp1. если jobList.isEmpty() то наверно в базе так и есть. Нет, в базе таблицы тоже связаны Foreign Key'ем, который является ID работника и находится в таблице t_jobs. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2007, 16:05:39 |
|
||
|
никак не въеду: EJB3 - связи между таблицами в коде - плиз хелп
|
|||
|---|---|---|---|
|
#18+
Да, блин, всё от недостаточного знания всего материала... Оказывается, списки есть, всё нормально и если их вывести в сешшн бине, они выводятся нормально. А если вернуть список рабочих(в каждом из которых есть списки их работ), то рабочие возвращаются нормально, а при обращении к спискам их работ, происходит Код: plaintext 1. Буду искать что и как :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2007, 17:58:15 |
|
||
|
|

start [/forum/topic.php?fid=59&gotonew=1&tid=2144881]: |
0ms |
get settings: |
17ms |
get forum list: |
26ms |
check forum access: |
7ms |
check topic access: |
7ms |
track hit: |
57ms |
get topic data: |
18ms |
get first new msg: |
10ms |
get forum data: |
4ms |
get page messages: |
80ms |
get tp. blocked users: |
2ms |
| others: | 330ms |
| total: | 558ms |

| 0 / 0 |
