|
|
|
Составной ИД в ентити, ребус, крохсворд, загадка природы
|
|||
|---|---|---|---|
|
#18+
Приветсвую! Вчера к концу дня заимел заморочку, думал дело житейское - конец понедельника. Ан нет, не рассосалось. Голову сломал, явно мой глюк, но найти не могу, спасайте! (Все исходные в конце приведу - пока плач Ярославны) Суть беды: периодически возникает необходимость в Entity описывать составной первичный ключ. Не злоупотребляю, но бывает. В проекте штуки 3-4 есть таких, проблем не доставляют, всё работает. Вчера затеял изменение, в том числе поменял в одном из ентити простой ключ на составной. МетОда под копирку, кнтрл Ц - кнтрл В. Компилю, деплою - на правленном ентити выскакивает ошибка от хибернейта: пропущена колонка. Смотрю, чешу репу. А с чего ей быть - оно же через @Transient описано. Комментирую, деплою, результат - не находится следующее поле, по алфавиту как оказалось(уже реальное). Причём не находит имя не то, что в @Column(name="") указано, а имя поля класса (ну не совпадают они у меня). Меняю поле в классе на то, как оно пишется в таблице - признаёт. Но ругань на следующее поле. Причём для меня стало открытием, что хибернейту (или кому?) по барабану на геттеры-сеттеры: он явно проверяет приват поле (как?) и на него рурается, или признаёт. Ибо я имя полю поменял, а геттеры-сеттеры остались прежние, забылся. Так ить сработало! Ушла ошибка дальше. Так и должно быть? Вобщем вывод сделал следующий: в отдельно взятом ентити перестали работать (опознаваться) аннотации. Понял, что бред, пошёл бороться дальше. Начал сравнивать побайтно тексты классов, которые работают, и сломанного - отличий не нашёл. Перечитал туториал по j2ee5 - вроде всё правильно у меня, всё по буквам. Создал новую тестовую табличку, с нуля написал ентити, класс составного ключа - ошибка. Но блин, соседние ентити ж работают! Смотрю по списку в логах - нормално их хбернейт проходит, не жалуется. Вообщем или мозги в отгуле, или глаз замылился. Поспособствуйте прозрению плиз! Театр действий: windowsXP jdk-1.6.31 Jboss-5.1, seam-2.2.2 Eclipse 3.7.2 + JbossTools 3.3 БД - Oracle10.2 Исходники по тестовой таблице, классам: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Первичный ключ: Код: java 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. Сам ентити: Код: java 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. Сообщение об ошибке: Код: java 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. Ну и понятно, что если убрать составной ключ (т.е. сделать через @Id на скажем appId, ну и в таблице поправить, то всё нормально работает) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2012, 12:35:38 |
|
||
|
Составной ИД в ентити, ребус, крохсворд, загадка природы
|
|||
|---|---|---|---|
|
#18+
AndreyDmt, не делай составные. Выгоды мало и тебе, и серверу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2012, 12:42:42 |
|
||
|
Составной ИД в ентити, ребус, крохсворд, загадка природы
|
|||
|---|---|---|---|
|
#18+
Возможно что @Column вообще игнорируется в Embeddable. Потому что ключ должен использоваться в разных таблицах. У нас сделано через AttributeOverrides http://stackoverflow.com/questions/331744/jpa-multiple-embedded-fields http://stackoverflow.com/questions/3046677/automatically-add-a-prefix-to-column-names-for-embeddable-classes http://stackoverflow.com/questions/951372/hibernate-mapping-a-second-embeddable-field-in-a-subclass ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2012, 12:52:40 |
|
||
|
Составной ИД в ентити, ребус, крохсворд, загадка природы
|
|||
|---|---|---|---|
|
#18+
Ну вообще я очень осторожно составные ключи пользую. Но вот понадобилось. Меня напрягает, что в том же пакете практически идентичный комплект Первичный ключ-Ентити работал и работает без проблем, я даже отличий не нахожу, кроме нюансов. И аннотации там работают. А в дефектном не работают как в классе первичного ключа, так и в самом ентити. Более того не работает не только @Column, но @Transient - то есть ничего :-)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2012, 14:35:30 |
|
||
|
Составной ИД в ентити, ребус, крохсворд, загадка природы
|
|||
|---|---|---|---|
|
#18+
AndreyDmtБолее того не работает не только @Column, но @Transient - то есть ничего :-)) Может из-за final ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2012, 14:41:13 |
|
||
|
Составной ИД в ентити, ребус, крохсворд, загадка природы
|
|||
|---|---|---|---|
|
#18+
BlazkowiczAndreyDmtБолее того не работает не только @Column, но @Transient - то есть ничего :-)) Может из-за final ? final сперва и не было. В туториал залез, там почему то с final пример. Поставил, ничего не поменялось ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2012, 14:46:54 |
|
||
|
Составной ИД в ентити, ребус, крохсворд, загадка природы
|
|||
|---|---|---|---|
|
#18+
Остаётся подебажить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2012, 14:51:29 |
|
||
|
Составной ИД в ентити, ребус, крохсворд, загадка природы
|
|||
|---|---|---|---|
|
#18+
AndreyDmtНу вообще я очень осторожно составные ключи пользую. Но вот понадобилось.AndreyDmt, я делал по началу составные ключи.... Что называется - экономил. Но потом, при добавлении связей и таблиц JOIN всё равно приходилось вводить суррогатные. Напр. - каскад из Город-Район-Улица и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2012, 15:07:21 |
|
||
|
Составной ИД в ентити, ребус, крохсворд, загадка природы
|
|||
|---|---|---|---|
|
#18+
Petro123я делал по началу составные ключи.... Что называется - экономил. Но потом, при добавлении связей и таблиц JOIN всё равно приходилось вводить суррогатные. Напр. - каскад из Город-Район-Улица и т.д. +1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2012, 15:09:06 |
|
||
|
Составной ИД в ентити, ребус, крохсворд, загадка природы
|
|||
|---|---|---|---|
|
#18+
Ну блин, оконфузился! Аж краска прошибает. Почувствуйте разницу: Не работает // @EmbeddedId private AaaContextDataKey contextDataKey; public AaaContextDataKey getContextDataKey() { return this.contextDataKey; } public void setContextDataKey(AaaContextDataKey contextDataKey) { this.contextDataKey = contextDataKey; } Работает // private AaaContextDataKey contextDataKey; @EmbeddedId public AaaContextDataKey getContextDataKey() { return this.contextDataKey; } public void setContextDataKey(AaaContextDataKey contextDataKey) { this.contextDataKey = contextDataKey; } Тыща извинений за количество букв, при мизере проблем. Точно понедельник виноват... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2012, 15:19:32 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=299&tid=2132144]: |
0ms |
get settings: |
18ms |
get forum list: |
25ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
47ms |
get topic data: |
22ms |
get forum data: |
4ms |
get page messages: |
98ms |
get tp. blocked users: |
2ms |
| others: | 368ms |
| total: | 596ms |

| 0 / 0 |
