|
|
|
JPA annotations: связывание композитными ключами
|
|||
|---|---|---|---|
|
#18+
Приветствую! Пытаюсь натянуть hibernate на существующую структуры бд. Primary key там суррогатных нету, делаем составные. Получается, что PrimaryKey состоит из 5ти колонок: year, type, area_id, short_code, long_code . В то же время, эти колонки выступают в качестве составных внешних ключей на другие таблицы: year, type, area_id на одну и year, short_code, long_code на другую. Year используется в обоих внешних ключах. Код: 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. Теперь, я пытаюсь использовать указанный выше объект в другом: Код: 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. Получается, что Description имеет PrimaryKey: year, type, area_id, short_code, long_code, lang и связан с Equipment внешним ключом year, type, area_id, short_code, long_code Запускаю - получаю Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Подскажите, плиз, в чём может быть проблема. У кого какие идеи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2012, 15:34:17 |
|
||
|
JPA annotations: связывание композитными ключами
|
|||
|---|---|---|---|
|
#18+
Не обнаружил в коде аннотаций @EmbeddedId и @Embeddable. Вроде на них делаются композитные ключи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2012, 15:41:20 |
|
||
|
JPA annotations: связывание композитными ключами
|
|||
|---|---|---|---|
|
#18+
wg, Вставить 1 поле счетчик FK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2012, 17:10:21 |
|
||
|
JPA annotations: связывание композитными ключами
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2012, 17:10:46 |
|
||
|
JPA annotations: связывание композитными ключами
|
|||
|---|---|---|---|
|
#18+
wgможно через IdClass ОК. Тогда вопрос закрыт? wg Difference using @Id and @EmbeddedId for a compound key Это вообще какая-то неотносящаяся к вашей проблеме тема. У меня вот так работает Код: java 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2012, 17:21:02 |
|
||
|
JPA annotations: связывание композитными ключами
|
|||
|---|---|---|---|
|
#18+
Аффтар. Вообще, странно. Как эта бд вообще работает. Приведите структуру. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2012, 17:23:54 |
|
||
|
JPA annotations: связывание композитными ключами
|
|||
|---|---|---|---|
|
#18+
а то что там где ни попадя @ID, никого не смущает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2012, 17:24:51 |
|
||
|
JPA annotations: связывание композитными ключами
|
|||
|---|---|---|---|
|
#18+
Лагмана то что там где ни попадя @ID, никого не смущает? http://docs.oracle.com/javaee/5/api/javax/persistence/IdClass.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2012, 17:30:25 |
|
||
|
JPA annotations: связывание композитными ключами
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, а.. извините ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2012, 17:33:20 |
|
||
|
JPA annotations: связывание композитными ключами
|
|||
|---|---|---|---|
|
#18+
Petro123wg, Вставить 1 поле счетчик FK немного подробнее, плиз. куда вставить, как пометить? Мож ссылку на доки или пример? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2012, 17:36:07 |
|
||
|
JPA annotations: связывание композитными ключами
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Проблема в связях с другими таблицами. Ждём базу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2012, 17:37:27 |
|
||
|
JPA annotations: связывание композитными ключами
|
|||
|---|---|---|---|
|
#18+
Petro123Проблема в связях с другими таблицами. Ждём базу База понятна. Есть куча натуральных ключей составленых в разных комбинациях из этих полей. year, type, area_id, short_code, long_code, lang Стоило бы под эти комбинации завести примитивные ключи и через них делать ассоциации. Автор же решил хитрее замапить, чтобы ещё сильнее запустать потенциального читателя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2012, 17:39:46 |
|
||
|
JPA annotations: связывание композитными ключами
|
|||
|---|---|---|---|
|
#18+
Petro123Blazkowicz, Проблема в связях с другими таблицами. Ждём базу думаете косяк в другом?.. ok, скоро выложу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2012, 17:41:11 |
|
||
|
JPA annotations: связывание композитными ключами
|
|||
|---|---|---|---|
|
#18+
BlazkowiczPetro123Проблема в связях с другими таблицами. Ждём базу База понятна. Есть куча натуральных ключей составленых в разных комбинациях из этих полей. year, type, area_id, short_code, long_code, lang Стоило бы под эти комбинации завести примитивные ключи и через них делать ассоциации. Автор же решил хитрее замапить, чтобы ещё сильнее запустать потенциального читателя. эу! писал же, что натягиваю на готовую базу 10ти-летней давности) Я же просто мазохизмом страдаю) Не могу лезть в бд и менять ничего ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2012, 17:43:20 |
|
||
|
JPA annotations: связывание композитными ключами
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Год внешним ключиком? Не знаю... пишу имхо...но мне интерсен пример базы) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2012, 17:44:14 |
|
||
|
JPA annotations: связывание композитными ключами
|
|||
|---|---|---|---|
|
#18+
wgэу! писал же, что натягиваю на готовую базу 10ти-летней давности) Я же просто мазохизмом страдаю) Не могу лезть в бд и менять ничего я же НЕ просто мазохизмом страдаю. очепятка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2012, 17:44:39 |
|
||
|
JPA annotations: связывание композитными ключами
|
|||
|---|---|---|---|
|
#18+
wgэу! писал же, что натягиваю на готовую базу 10ти-летней давности) Я же просто мазохизмом страдаю) Не могу лезть в бд и менять ничего Я не имел ввиду менять базу. Переделайте так чтобы убрать ManyToOne из Id. Это реально? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2012, 17:46:40 |
|
||
|
JPA annotations: связывание композитными ключами
|
|||
|---|---|---|---|
|
#18+
Petro123Blazkowicz, Год внешним ключиком? Не знаю... пишу имхо...но мне интерсен пример базы) мля, ну композитный же ключ, включает в себя и год тоже. Что не понятно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2012, 17:47:20 |
|
||
|
JPA annotations: связывание композитными ключами
|
|||
|---|---|---|---|
|
#18+
Blazkowiczwgэу! писал же, что натягиваю на готовую базу 10ти-летней давности) Я же просто мазохизмом страдаю) Не могу лезть в бд и менять ничего Я не имел ввиду менять базу. Переделайте так чтобы убрать ManyToOne из Id. Это реально? не знаю. я сделал так по своему разумению, т.к. в БД действительно такие составные Id и внешние ключи используют поля этих id'шников. наверное, по-другому это не свяжешь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2012, 18:03:27 |
|
||
|
JPA annotations: связывание композитными ключами
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, ну прав ты прав. Пусть не даёт БД. OK? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2012, 18:19:21 |
|
||
|
JPA annotations: связывание композитными ключами
|
|||
|---|---|---|---|
|
#18+
wgне знаю. я сделал так по своему разумению, т.к. в БД действительно такие составные Id и внешние ключи используют поля этих id'шников. наверное, по-другому это не свяжешь 1) Попробуйте Embedded 2) Подебажте хибернейт в том месте где он выкидывает исключение, чтобы разобраться. 3) Попробуйте убрать ассоциации из ключей, если получится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2012, 10:19:41 |
|
||
|
JPA annotations: связывание композитными ключами
|
|||
|---|---|---|---|
|
#18+
Кажется я сделал так, как мне советовали, убрал ассоциации с ключей. Мне пришлось добавить некоторое дублирование в entity: я добавил поля для всех колонок БД, которые участвуют в маппинге и переместил Id аннотации на эти поля(см. код). @Entity @Table(name = "equipment") @IdClass(value = EquipmentId.class) public class Equipment { private Model model; private Integer year; private String type; private Integer areaId; private String shortCode; private String longCode; @Id public Integer getYear() { //... } // и для всех новый полей так же private EquipmentPackage eqPackage; @Id @ManyToOne(fetch = FetchType.LAZY) @JoinColumns({ @JoinColumn(name = "year", referencedColumnName = "year", insertable = false), @JoinColumn(name = "type", referencedColumnName = "type", insertable = false), @JoinColumn(name = "area_id", referencedColumnName = "area_id", insertable = false) }) public Model getModel() { return model; } @Id @ManyToOne @JoinColumns({ @JoinColumn(name = "year", referencedColumnName = "year"), @JoinColumn(name = "type", referencedColumnName = "type"), @JoinColumn(name = "area_id", referencedColumnName = "area_id"), @JoinColumn(name = "short_code", referencedColumnName = "short_code"), @JoinColumn(name = "long_code", referencedColumnName = "long_code") }) public EquipmentPackage getEqPackage() { return eqPackage; } // all other stuff: fields, getters and setters } public class EquipmentId { private Model model; private EquipmentPackage eqPackage; private Integer year; private String type; private Integer areaId; private String shortCode; private String longCode; @Column(name = "year") public Integer getYear() { // ... } // и для всех остальных новых полей так же @ManyToOne(fetch = FetchType.LAZY) @JoinColumns({ @JoinColumn(name = "year", referencedColumnName = "year", insertable = false), @JoinColumn(name = "type", referencedColumnName = "type", insertable = false), @JoinColumn(name = "area_id", referencedColumnName = "area_id", insertable = false) }) public Model getModel() { return model; } @ManyToOne(fetch = FetchType.LAZY) @JoinColumns({ @JoinColumn(name = "year", referencedColumnName = "year", insertable = false), @JoinColumn(name = "short_code", referencedColumnName = "short_code", insertable = false), @JoinColumn(name = "long_code", referencedColumnName = "long_code", insertable = false) }) public EquipmentPackage getEqPackage() { return eqPackage; } } Благодарю за помощь! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2012, 09:43:34 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38008599&tid=2130702]: |
0ms |
get settings: |
16ms |
get forum list: |
24ms |
check forum access: |
7ms |
check topic access: |
7ms |
track hit: |
50ms |
get topic data: |
19ms |
get forum data: |
5ms |
get page messages: |
103ms |
get tp. blocked users: |
2ms |
| others: | 294ms |
| total: | 527ms |

| 0 / 0 |
