|
|
|
абстрактный класс с полем другого абстрактного класса в Hibernate - реально?
|
|||
|---|---|---|---|
|
#18+
Есть класс AbstractTank с полем AbstractGun и классы SuperTank, UberTank, SuperGun, UberGun, которые экстендят соотвествующие абстрактные классы. И хибер ругается: org.hibernate.AnnotationException: @OneToOne or @ManyToOne on UberTank.gun references an unknown entity: AbstractGun Вот такие у меня классы с маппингом: Код: 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. 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. И вот тестовый пример: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Вообще не очень понятно, как хибер определит FK-еи для таблиц танков и пушек при таком подходе и как же тогда мне замапить такое? Откзаываться от абстрактного класса и копипастить код из него в конкретные классы и отказаться от полиморфизма? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2013, 20:57:42 |
|
||
|
абстрактный класс с полем другого абстрактного класса в Hibernate - реально?
|
|||
|---|---|---|---|
|
#18+
gait, ты уверен, что тебе нужно разносить все эти сущности по разным таблицам? На первый взгляд все оружие может лежать в одной таблице - guns, и танки - в одной таблице tanks с выборкой по дискриминатору, например. Если оставить как есть, то можно использовать generic и писать аннотацию @OneToOne не в абстрактном классе, а в потомке: Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2013, 01:26:49 |
|
||
|
абстрактный класс с полем другого абстрактного класса в Hibernate - реально?
|
|||
|---|---|---|---|
|
#18+
точнее Код: java 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2013, 01:29:29 |
|
||
|
абстрактный класс с полем другого абстрактного класса в Hibernate - реально?
|
|||
|---|---|---|---|
|
#18+
Чего-то не получается с генериками. Вываливается org.hibernate.MappingException: Could not determine type for: UberTank, at table: TEST_UBER_GUN, for columns: [org.hibernate.mapping.Column(tank)] :( Код такой: AbstractTank.java: Код: 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. UberTank.java Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. AbstractGun.java Код: 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. UberGun.java Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Использование: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Еще я пробовал к вышеописанному добавить @AttributeOverride в UberGun и UberTank с оверрайдом поля "tank" и "gun" соотвественно, но это не помогло. Вообще я новичек в хибере, может я что-то упустил? Может нужно что-то еще добавить где-то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2013, 11:17:14 |
|
||
|
абстрактный класс с полем другого абстрактного класса в Hibernate - реально?
|
|||
|---|---|---|---|
|
#18+
Advaты уверен, что тебе нужно разносить все эти сущности по разным таблицам? Было бы желательно, но если вариант с генериками не получится сделать, то буду делать как вы и описали - с двумя таблицами и дискриминатором. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2013, 11:44:23 |
|
||
|
абстрактный класс с полем другого абстрактного класса в Hibernate - реально?
|
|||
|---|---|---|---|
|
#18+
gait, в абстрактном классе надо было пометить методы getTank() и getGun() аннотацией @Transient. Во вложении рабочий код. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2013, 13:20:18 |
|
||
|
абстрактный класс с полем другого абстрактного класса в Hibernate - реально?
|
|||
|---|---|---|---|
|
#18+
Спасибо, Adva! С @Transient на геттере всё заработало! Но воспользоваться полиморфизмом в полной мере (то есть когда мы любому абстрактному танку можем просетать любую абстрактную пушку. То есть убер танку можно просетать супер пушку итп) получается только используя первый вариант (одна таблица с дискриминатором) и я немного подумав понял, что всё-таки перемудрил с разбиением, нужно было одной таблицей делать с самого начала. Еще раз спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2013, 14:52:19 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38379256&tid=2128700]: |
0ms |
get settings: |
15ms |
get forum list: |
22ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
40ms |
get topic data: |
17ms |
get forum data: |
4ms |
get page messages: |
83ms |
get tp. blocked users: |
3ms |
| others: | 324ms |
| total: | 518ms |

| 0 / 0 |
