|
|
|
Мапинг по уникальным полям
|
|||
|---|---|---|---|
|
#18+
Добрый день! Возник вопрос - задача : требуется организовать мапинг не по id как это сделано по умолчанию ,а по уникальному полю: в схемах OneToMany и ManyToMany для примера : сущность User : имеет уникальный праймари кей id - автоинкрементный для mysql. Он является автоинкрементным , что не подходит для мапинга при условии что с базой будут проводиться технические работы и репликации. для идентификации пользователя хочется использовать его уникальный user_Id - который моя система получает из другой системы. user_id - уникален на несколько в нескольких системах на уровне постоянства. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. т.е. телефоны должны мапиться не по id ,а по user_id так же в таблице телефонов есть уникальных phone_id - для каждого номера, помимо помимо автоинкрементного id. второй вопрос по связке ManyToMany в класической схеме из трех таблиц user - user_role - role где user_role - расшифровочная таблица (класс ассоциация) у каждого пользователя св системе могут быть разные роли (картеж) так же у каждой роли по мимо id есть ее уникальный role_id как описать в бинах анноацию для связи ManyToMany - на по первичному праймари ключу ? а через уникальные поля user_id и role_id ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2013, 09:42:19 |
|
||
|
Мапинг по уникальным полям
|
|||
|---|---|---|---|
|
#18+
такая табличка? id тел_id тел1 A 916-811-12-132 Б 912-123-22-1115 С 995-111-33-55 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2013, 10:34:46 |
|
||
|
Мапинг по уникальным полям
|
|||
|---|---|---|---|
|
#18+
Petro123, id - int phone_id это сам номер 79055401234 он уникален ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2013, 10:43:50 |
|
||
|
Мапинг по уникальным полям
|
|||
|---|---|---|---|
|
#18+
Atum1Он является автоинкрементным , что не подходит для мапинга при условии что с базой будут проводиться технические работы и репликации. правильно я понял что, репликация _мешает_ использовать id в табличке выше. А вот, тел_id не мешает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2013, 10:44:45 |
|
||
|
Мапинг по уникальным полям
|
|||
|---|---|---|---|
|
#18+
Atum1, id тел_id1 91681112132 912123221115 9951113355 так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2013, 10:46:35 |
|
||
|
Мапинг по уникальным полям
|
|||
|---|---|---|---|
|
#18+
Atum1, - нарисуй вторую таблу для маппинга. Кнопка формата - Table ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2013, 10:48:36 |
|
||
|
Мапинг по уникальным полям
|
|||
|---|---|---|---|
|
#18+
user id user_id1 91681112132 912123221115 9951113355 role id role_idrole_name1 10admin2 20user15 30guest user_role user_id role_id9168111213 109168111213 209121232211 209951113355 30 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2013, 13:45:25 |
|
||
|
Мапинг по уникальным полям
|
|||
|---|---|---|---|
|
#18+
Да все верно - нельзя закладываться на авто созданные id - готорые генерит хибер. а вот номера телефонов , как и номера ролей - они уникальны везде во всех схемах и базах. Мапить нужно по ним. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2013, 13:48:07 |
|
||
|
Мапинг по уникальным полям
|
|||
|---|---|---|---|
|
#18+
user id user_id1 91681112132 912123221115 9951113355 один ко многим : user - phone phone id phone_id user_id111 9168111213212 91212322111513 99511133551714 9951113355 в phone уникальный user.user_id - а не user.id по user.user_id и мапимся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2013, 13:51:53 |
|
||
|
Мапинг по уникальным полям
|
|||
|---|---|---|---|
|
#18+
Atum1Да все верно - нельзя закладываться на авто созданные id - готорые генерит хибер. осталось узнать, как ты получишь ID при вставке нового объекта пользователем. ВИ - польз-ль нажал кнопку "Новый юзверь". - дальше? ЗЫ. Хибер САМ не генерирует ID ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2013, 14:09:47 |
|
||
|
Мапинг по уникальным полям
|
|||
|---|---|---|---|
|
#18+
Petro123Atum1Да все верно - нельзя закладываться на авто созданные id - готорые генерит хибер. осталось узнать, как ты получишь ID при вставке нового объекта пользователем. ВИ - польз-ль нажал кнопку "Новый юзверь". - дальше? ЗЫ. Хибер САМ не генерирует ID мне приходят уже готовые данные из другой системы . моя система не создает новых юзеров . так что мне придет : запись user 9168111213 ; имя; фамилия; отчество;год рождения все что я могу - это добавить ее в мои таблицы . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2013, 14:31:18 |
|
||
|
Мапинг по уникальным полям
|
|||
|---|---|---|---|
|
#18+
Atum1мне приходят уже готовые данные из другой системы . моя система не создает новых юзеров . тогда так: - аннотация Код: java 1. - реализация интерфейса Код: java 1. - второе Id2 поле выкинуть - в первое хибер будет писать Id из другой системы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2013, 15:26:53 |
|
||
|
Мапинг по уникальным полям
|
|||
|---|---|---|---|
|
#18+
Atum1Он является автоинкрементным , что не подходит для мапинга при условии что с базой будут проводиться технические работы и репликации. при этом просто выключают счётчики автоинкремента. Не смешивай технические работы и рабочий режим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2013, 15:31:44 |
|
||
|
Мапинг по уникальным полям
|
|||
|---|---|---|---|
|
#18+
ну и вариант2 - маппинг по Id с инкрементом. Эти счётчики абстрактные и ничем не мешают в работе. Пользователям этот код не показывают. Всё зависит что у тебя там за работы и реплики. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2013, 15:48:29 |
|
||
|
Мапинг по уникальным полям
|
|||
|---|---|---|---|
|
#18+
Atum1сущность User : имеет уникальный праймари кей id - автоинкрементный для mysql. Он является автоинкрементным , что не подходит для мапинга при условии что с базой будут проводиться технические работы и репликации. Это утверждение является неверным логическим посылом. И из него соответственно следует неверный вывод -- твоё желание сделать маппинг не по PK. В книгах и руководствах по Хиберу ( я думаю я не очень сильно ошибусь, если распространю подход Хибера на весь современный JPA, ведь по сути он и был слизан с Хибера) в самом-самом начале есть глава, в которой написана самая главная заповедь Хиберниста: Хибер ВеликийУ каждой таблицы есть PK, и PK идентифицирует в таблице запись. Собственно, всё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2013, 20:15:57 |
|
||
|
Мапинг по уникальным полям
|
|||
|---|---|---|---|
|
#18+
Atum1а через уникальные поля user_id и role_id ? Собственно, сделай в БД эти два поля первичными ключами, а те, другие -- просто UNIQUE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2013, 20:17:02 |
|
||
|
Мапинг по уникальным полям
|
|||
|---|---|---|---|
|
#18+
Хибер ВеликийУ каждой таблицы есть PK, и PK идентифицирует в таблице запись. У хибера есть еще одна заповедь, на которую меньше обращают внимания: не путать красное с соленым и разделять первичный ключ и бизнес ключ. Есть даже специальная аннотация @NaturalId для бизнес ключей. Это наверное лучше всего для описываемого случая: для внутренней работы использовать первичные/вторичные ключи,а для поиска значения из внешней системы. А для отношений всегда можно указать, какие поля использовать для связывания: @JoinColumn и @OneToMany(mappedBy=...)+@Column ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2013, 04:04:43 |
|
||
|
Мапинг по уникальным полям
|
|||
|---|---|---|---|
|
#18+
пролетевшийХибер ВеликийУ каждой таблицы есть PK, и PK идентифицирует в таблице запись. У хибера есть еще одна заповедь, на которую меньше обращают внимания: не путать красное с соленым и разделять первичный ключ и бизнес ключ. Есть даже специальная аннотация @NaturalId для бизнес ключей. Это наверное лучше всего для описываемого случая: для внутренней работы использовать первичные/вторичные ключи,а для поиска значения из внешней системы. А для отношений всегда можно указать, какие поля использовать для связывания: @JoinColumn и @OneToMany(mappedBy=...)+@Column @NaturalId и @JoinColumn c указанием имен полей в обоих классах - должно сработать. Просто @JoinColumn - когда я указывал имя колонки и имя реверсивной колонки - у меня почему то не сработало ! Да задача такая - я хочу оставить синтетический ключ и (PK) - id - он будет полезен. но мапинг вести по другим полям. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2013, 13:12:55 |
|
||
|
Мапинг по уникальным полям
|
|||
|---|---|---|---|
|
#18+
MasterZivAtum1сущность User : имеет уникальный праймари кей id - автоинкрементный для mysql. Он является автоинкрементным , что не подходит для мапинга при условии что с базой будут проводиться технические работы и репликации. Это утверждение является неверным логическим посылом. И из него соответственно следует неверный вывод -- твоё желание сделать маппинг не по PK. В книгах и руководствах по Хиберу ( я думаю я не очень сильно ошибусь, если распространю подход Хибера на весь современный JPA, ведь по сути он и был слизан с Хибера) в самом-самом начале есть глава, в которой написана самая главная заповедь Хиберниста: Хибер ВеликийУ каждой таблицы есть PK, и PK идентифицирует в таблице запись. Собственно, всё. Да такое правило есть и вся идея ORM базируется на этом краеугольном камне - pk - id но в реальной жизни у вас могут быть разные системы и они должны общаться между собой ... есть XA транзакции итд итп... есть репликации - и одно дело когда репликация - полностью повторяет содержимое фактически побайтово ... и совсем другое когда она основана на вставках - insert ... как вариант я рассматривал возможность описать класс user - c id - как PK уникальным но не автоинкрементным .. тогда это поле и будет равно внешнему user_id из другой системы ... и при insert будет указан этот id но может возникнуть ситуация, когда в системе появятся свои пользователи ... и тогда мне потребуется своя последовательность для генерации UUID для пользователей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2013, 13:22:02 |
|
||
|
Мапинг по уникальным полям
|
|||
|---|---|---|---|
|
#18+
нашел такой пример : по @NaturalId http://www.concretepage.com/hibernate/naturalid_hibernate_annotation.php ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2013, 13:33:22 |
|
||
|
Мапинг по уникальным полям
|
|||
|---|---|---|---|
|
#18+
Atum1Да такое правило есть и вся идея ORM базируется на этом краеугольном камне - pk - id но в реальной жизни у вас могут быть разные системы и они должны общаться между собой ... === и что? Если ID системы А не равен ID системы Б, то это нормально. Т.к. это ОДИН из вариантов репликации. есть XA транзакции итд итп... ==== ID просто технический номер в системе А.... У Петрова будет 01234 в А, а в Б будет 4567 есть репликации - и одно дело когда репликация - полностью повторяет содержимое фактически побайтово ... и совсем другое когда она основана на вставках - insert ... ===== побайтово - дамп из бэкапа = id совпадают. При МЕТОДЕ insert они будут разными. Всё остальное одинаковым. итого NaturalId просто ставит уникальный индекс в БД для райзе. Ну, и несколько помогают в поиске объекта. Хибер и БД всё равно будут работать по ID (скрестив пальцы за спиной))). Вопросы репликации совместно с ID уже давно давно решены в форумах по СУБД. Не надо Хибер ставить сверху БД. Если аэропорт AMS Амстердам в БД, то это не значит, что у них ID маппинга одинаков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2013, 20:35:46 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38298583&tid=2129154]: |
0ms |
get settings: |
13ms |
get forum list: |
22ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
41ms |
get topic data: |
19ms |
get forum data: |
5ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
| others: | 289ms |
| total: | 463ms |

| 0 / 0 |
