|
|
|
Hibernate mapping
|
|||
|---|---|---|---|
|
#18+
Всем привет. Имеется вот такая объективная реальность, данная нам в ощущениях: Структура БД: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Классы: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. И маппинг: Код: xml 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. Почему так сделано вопрос не стоит. Работает - не трогай. Но вот понадобилось в класс UserRole прокинуть поле USER_ROLE.USER_ROLE_NAME. Структуру БД менять нельзя, можно только маппинг крутить. Попробовал через secondary table, но не получается увязать с составным ключом в USER_TO_USER_ROLE. Только если убрать упоминание о составном ключе из маппинга. Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Но что-то не нравится мне в таком костыле. Как можно(?) сделать правильно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2017, 17:31 |
|
||
|
Hibernate mapping
|
|||
|---|---|---|---|
|
#18+
13-й Пилигрим, У вас в базе есть поле ИмяРоли. Почему в классе его нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2017, 19:18 |
|
||
|
Hibernate mapping
|
|||
|---|---|---|---|
|
#18+
13-й Пилигримможно только маппинг крутить. Ну и крути. У тебя первый класс, вторая четверть Много ко Многим. Убери только флаг актуальности. Тошнит от него и аноотации не в xml. Я лично плохо вижу в xml. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2017, 19:23 |
|
||
|
Hibernate mapping
|
|||
|---|---|---|---|
|
#18+
Petro12313-й Пилигрим, У вас в базе есть поле ИмяРоли. Почему в классе его нет? Не стал приводить измененный вариант. Представим, что есть Код: java 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2017, 19:39 |
|
||
|
Hibernate mapping
|
|||
|---|---|---|---|
|
#18+
Petro123Убери только флаг актуальности. Тошнит от него Выпей таблетку и представь там любое другое поле Petro123и аноотации не в xml. Я лично плохо вижу в xml. Ну, ради тебя я весь legacy-проект на аннотации из xml переводить не буду. Пример приведен намеренно до предела упрощенный, почти абстрактный. Смысл проблемы, что нужно смапить поля из разных таблиц: userRoleId и actual из USER_TO_USER_ROLE, а userRoleName из USER_ROLE, ну или userRoleId и userRoleName из USER_ROLE, а actual из USER_TO_USER_ROLE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2017, 19:45 |
|
||
|
Hibernate mapping
|
|||
|---|---|---|---|
|
#18+
13-й ПилигримPetro12313-й Пилигрим, У вас в базе есть поле ИмяРоли. Почему в классе его нет? Не стал приводить измененный вариант. Представим, что есть Код: java 1. 2. 3. 4. 5. 6. Тогда не понял слово Прокинуть) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2017, 19:45 |
|
||
|
Hibernate mapping
|
|||
|---|---|---|---|
|
#18+
13-й ПилигримСмысл проблемы, что нужно смапить поля из разных таблиц: userRoleId и actual из USER_TO_USER_ROLE, а userRoleName из USER_ROLE, ну или userRoleId и userRoleName из USER_ROLE, а actual из USER_TO_USER_ROLE. Без actual работает? Зы. Таблетку выпил. Терплю и маппинг не читаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2017, 19:50 |
|
||
|
Hibernate mapping
|
|||
|---|---|---|---|
|
#18+
Petro12313-й Пилигримпропущено... Не стал приводить измененный вариант. Представим, что есть Код: java 1. 2. 3. 4. 5. 6. Тогда не понял слово Прокинуть) Нужно правильно написать маппинг. Пока у меня получилось только если в маппинг не указывать что ключ составной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2017, 19:52 |
|
||
|
Hibernate mapping
|
|||
|---|---|---|---|
|
#18+
13-й Пилигрим UserRole прокинуть поле USER_ROLE.USER_ROLE_NAME. И вот, получается, что в классе Роли поле имяРоли есть. Удачи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2017, 19:54 |
|
||
|
Hibernate mapping
|
|||
|---|---|---|---|
|
#18+
Petro123Без actual работает? Без него нет смысла работать. Ещё раз: есть 2 значимых поля в разных таблицах. Их нужно свести в одну сущность ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2017, 19:56 |
|
||
|
Hibernate mapping
|
|||
|---|---|---|---|
|
#18+
13-й ПилигримБез него нет смысла работать. Ты хочешь, чтобы актуальность влияла на отношения тогда я пас. Извиняй. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2017, 20:01 |
|
||
|
Hibernate mapping
|
|||
|---|---|---|---|
|
#18+
13-й ПилигримБез него нет смысла работать. Off Вообще, элементарно. - все не актуальные записи удалить - стандартный маппинг - в гуи сделать галку актуальность через настройки и шаблоны ролей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2017, 20:06 |
|
||
|
Hibernate mapping
|
|||
|---|---|---|---|
|
#18+
К сожалению, GUI менять нельзя, структуру и наполнение базы менять нельзя. Если вас так смущает признак актуальности, представьте вместо него любой другой признак, имеющий значение только для пары. Ну, например, есть врач, есть виды приема, которые этот врач осуществляет, и есть стоимость конкретного вида приема у конкретного врача. Код: plaintext 1. 2. 3. 4. 5. 6. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Код: xml 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. Это, опять же, абстрактный пример, наполненный для наглядности некой смысловой нагрузкой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2017, 08:33 |
|
||
|
Hibernate mapping
|
|||
|---|---|---|---|
|
#18+
13-й Пилигрим, Ok С врачом должно работать. Будет время посмотрю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2017, 09:41 |
|
||
|
Hibernate mapping
|
|||
|---|---|---|---|
|
#18+
Petro123Вообще, элементарно. - все не актуальные записи удалить Зачем. Может им надо знать кто кем был. Может у них ротация кадров без повторов предусмотрена. Типа сначчала Иванов был директором, потом стал говночистом. А Петров наоборот. И HR помнят кто был кем, чтоб при следующей ротации их на старые места не поставить. :) Просто у ТС объектная модель не соответствует реляционной. У него бывших директоров не бывает. Если кого увольняют, то вся роль становится не актуальной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2017, 15:55 |
|
||
|
Hibernate mapping
|
|||
|---|---|---|---|
|
#18+
Сергей АрсеньевМожет им надо знать кто кем был. А какие роли были надо? А уволенные надо? Пусть будут спрпвочные поля, а не значимые. Т.е. проверяет не маппинг, а БЛ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2017, 18:07 |
|
||
|
Hibernate mapping
|
|||
|---|---|---|---|
|
#18+
Сергей Арсеньев, Мысль такая, что к примеру, если в табле 20 записей и у 15 галка неАктуально, то при открытии сессии у Иванов в коллекции будет 20 ролей по маппингу. А потом пусть List.where(isActual = true) если надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2017, 18:40 |
|
||
|
Hibernate mapping
|
|||
|---|---|---|---|
|
#18+
13-й Пилигрим Код: java 1. 2. 3. 4. 5. не один доктор, а коллекция докторов. Много-ко-многим это коллекции (много) с обоих сторон. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2017, 00:39 |
|
||
|
Hibernate mapping
|
|||
|---|---|---|---|
|
#18+
13-й Пилигрим Код: java 1. 2. 3. 4. 5. у тебя cost находится в промежуточной табле. Значит и в классе это поле должно сидеть в DOCTOR_TO_REC_TYPE. ... Т.к. у тебя кроме связи двух полей добавилось поле cost, то тогда делаем среднюю таблу как полноценную сущность. Хоть с 50-тью полями. Как то так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2017, 01:20 |
|
||
|
Hibernate mapping
|
|||
|---|---|---|---|
|
#18+
[quot Petro123]13-й Пилигрим Код: java 1. 2. 3. 4. 5. не один доктор, а коллекция докторов. Много-ко-многим это коллекции (много) с обоих сторон. Нет, это именно конкретный доктор с конкретной стоимостью за конкретный вид приема. Т.е. у другого доктора этот же вид приема может иметь другую стоимость. Petro123у тебя cost находится в промежуточной табле. Значит и в классе это поле должно сидеть в DOCTOR_TO_REC_TYPE. ... Т.к. у тебя кроме связи двух полей добавилось поле cost, то тогда делаем среднюю таблу как полноценную сущность. Хоть с 50-тью полями. Как то так. Другую таблу делать нельзя... Какая бы несовершенная архитектура ни была. В общем, как я понял, в такой постановке (без изменения самой постановки) решение не находится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2017, 08:25 |
|
||
|
Hibernate mapping
|
|||
|---|---|---|---|
|
#18+
13-й ПилигримНет, это именно конкретный доктор с конкретной стоимостью за конкретный вид приема. Т.е. у другого доктора этот же вид приема может иметь другую стоимость. Напиши тут 5 строк с данными и пойшь Что не может доктор находится в табле ВидПриёма. Как и не может User быть в Roles. Только list User. Т.к. у роли много юзверей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2017, 08:34 |
|
||
|
Hibernate mapping
|
|||
|---|---|---|---|
|
#18+
13-й Пилигрим, 1 ый пример лучше был. Только заменить поле Актуальность на ДатуВставки. Тогда 3 сущности и 3 класса. Прокинуть нельзя т.к. конкретный ЮзерРоль будет в средней сущности ЮзерТоРолес ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2017, 08:53 |
|
||
|
Hibernate mapping
|
|||
|---|---|---|---|
|
#18+
13-й ПилигримНет, это именно конкретный доктор с конкретной стоимостью за конкретный вид приема. Почему он сидит в табли СправочникРабот? Ведь "прокидывают" поле в другую сущность в виде list. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2017, 08:59 |
|
||
|
Hibernate mapping
|
|||
|---|---|---|---|
|
#18+
13-й ПилигримДругую таблу делать нельзя... Какая бы несовершенная архитектура ни была. У тебя нет архитектуры. У тебя бардак. В БД есть возможность, что пациент Иванов пришел ко врачу Сидорову и заплатил 100р. Потом пришел Петров и заплатил 200. А в объектах у тебя врач Сидоров и 200 (ну или 100) и что ходили к нему и Иванов и Петров. Как говорят в армии - пусть будет безобразно, но должно быть однообразно. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2017, 12:33 |
|
||
|
Hibernate mapping
|
|||
|---|---|---|---|
|
#18+
Сергей АрсеньевВ БД есть возможность, что пациент Иванов пришел ко врачу Сидорову и заплатил 100р. Потом пришел Петров и заплатил 200. Шта?! Пациент Петров пришел к вчерашнему выпускнику Сидорову и заплатил 100р. Не понравилось. Пошел к профессору Преображенскому и заплатил 1000р. Пациент Петров, пройдя по тем же врачам, заплатит столько же сколько и Иванов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2017, 12:46 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39526039&tid=2122569]: |
0ms |
get settings: |
9ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
23ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 228ms |
| total: | 331ms |

| 0 / 0 |
