|
|
|
Hibernate замапить три класса на один энтити по условию.
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Есть вопрос. Необходимо реализовать следующее в хибернейте. List<MyEnt> ents=findByCriteria1(Integer primaryKey,Integer entType) где в зависимости от типа entType данные брались из разных почти идентичных таблиц с некоторыми изменениями. Причем список полей желательно сделать один для простоты обслуживания. То есть класс в маппинге должен быть один в идеале или же список полей должен наследоваться то есть у класса 2 список полей бужет от класса общего плюс какие то. Решил часть проблемы с помощью entity-name но как выбрать то по entity-name не пользуясь сессиями а queryBuildra ми и критериями. Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2013, 11:09:18 |
|
||
|
Hibernate замапить три класса на один энтити по условию.
|
|||
|---|---|---|---|
|
#18+
Через наследование: http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/inheritance.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2013, 11:11:53 |
|
||
|
Hibernate замапить три класса на один энтити по условию.
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Спасибо за ответ. А как выбрать по entity-name через query builder и т д? <class name="..." <subclass name="..." entity-name="ent1"... <subclass name="..." entity-name="ent2"... <subclass name="..." entity-name="ent3"... как выбрать из ent3? Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2013, 11:51:21 |
|
||
|
Hibernate замапить три класса на один энтити по условию.
|
|||
|---|---|---|---|
|
#18+
В мануале описаны разные стратегии. Разберитесь в них и посмотрите какая вам больше подходит. Проблема в том, что если работать со всеми таблицами, как с одной, то хибернейту как-то надо определять, где искать конкретный экземпляр. Он это сделает либо через SELECT + UNION всех таблиц. Либо можно завести отдельную таблицу, где будет общий для трёх таблиц Id и discriminator, по котрому хибер всегда сможет определить из какой таблицы данный id. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2013, 11:55:17 |
|
||
|
Hibernate замапить три класса на один энтити по условию.
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Спасибо за ответ. Так в том то все и дело что я ему передаю параметр и на основании его он должен определить с какой таблицы тянуть. Для этого кстати подходит entity-id. Может имеет смысл создать составной ключ из ид и типа таблицы? И вообще с вашей точки зрения в случае когда имеем 3 таблицы и попеременно выбираем с каждой из них без юнионов и т д что лучше сделать? Три отдельные таблицы? Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2013, 12:52:54 |
|
||
|
Hibernate замапить три класса на один энтити по условию.
|
|||
|---|---|---|---|
|
#18+
avalon12, - наследование обязательно нужно? Т.к. когда 3-4-5 справочников в БД объединяют в одну большую-большую таблицу, то профит получают небольшой. Что 3 отдельных почти одинаковых таблицы, что одна большая суперТаблица - одинаково. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2013, 14:54:31 |
|
||
|
Hibernate замапить три класса на один энтити по условию.
|
|||
|---|---|---|---|
|
#18+
Petro123, В том то и дело что наследование не надо это 3 по смыслу одинаковые таблицы со слегка разной структурой. Нужен один класс для работы с ними, для легкости доступа. Изменить что либо в существующей системе невозможно поэтому обьединять таблицы никто не будет. Нужен интерфейс типа findByParam(key,type) без юнионов, обьединений и прочего плюс не должно быть дублирования кода в маппинге то есть два раза одно поле где type - какой таблицы брать а key - первичный ключ там. В iBatis это реализовано более чем просто и тока в хибере сразу проблема. Помогите как это можно сделать. Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2013, 15:31:25 |
|
||
|
Hibernate замапить три класса на один энтити по условию.
|
|||
|---|---|---|---|
|
#18+
avalon12где type - какой таблицы брать а key - первичный ключ там. В iBatis это реализовано более чем просто и тока в хибере сразу проблема казалось бы, что стоит в findByCriteria1 сделать простой switch (type) и в зависимости от него создавать критерий по Entity1...3, а потом добавлять общие критерии? или сделать на генериках, передавая прямо Enitity.class вместо type? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2013, 16:02:20 |
|
||
|
Hibernate замапить три класса на один энтити по условию.
|
|||
|---|---|---|---|
|
#18+
chpasha, В основном дело в загоне руководства которое считает что когда все универсально это супер как круто и что если 3 таблицы почти одинаковы то надо один класс и в него пихать все. То есть сокрыть детали бд на самом нижнем уровне а не на уровне сервисов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2013, 16:12:24 |
|
||
|
Hibernate замапить три класса на один энтити по условию.
|
|||
|---|---|---|---|
|
#18+
avalon12chpasha, да не надо на зеркало пенять, я тебе про решение задачи, а ты мне про руководство. Код: java 1. 2. 3. 4. 5. 6. маппинг выбираем между Table per concrete class и Table per subclass в зависимости от структуры таблиц ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2013, 16:24:05 |
|
||
|
Hibernate замапить три класса на один энтити по условию.
|
|||
|---|---|---|---|
|
#18+
chpasha, Спасибо за ответ Да я просто обрисовал почему такие стремление универсиализировать. Все бы хорошо в Вашем примере если бы не одно НО - должен быть только один универсальный класс, не более одного который бы самим хобером конфигурился в завистмости от таблицы. Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2013, 16:31:28 |
|
||
|
Hibernate замапить три класса на один энтити по условию.
|
|||
|---|---|---|---|
|
#18+
avalon12, - если про маппинг, то в хибере он статичный _в общем случае_. Приведи пример с IBatis ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2013, 16:39:42 |
|
||
|
Hibernate замапить три класса на один энтити по условию.
|
|||
|---|---|---|---|
|
#18+
вот костыль есть, не уверен, есть ли он в современных версиях hibernate http://stackoverflow.com/questions/5215471/how-to-map-2-identical-tables-same-properties-to-1-entity ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2013, 16:42:11 |
|
||
|
Hibernate замапить три класса на один энтити по условию.
|
|||
|---|---|---|---|
|
#18+
avalon12должен быть только один универсальный класс, не более одного должен разочаровать твое начальство. вряд ли получится наклонить хибер под свои кривые хотелки - он этого не любит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2013, 16:44:19 |
|
||
|
Hibernate замапить три класса на один энтити по условию.
|
|||
|---|---|---|---|
|
#18+
Petro123, Спасибо за ответ. Вот пример Код: 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. выбор таблицы, набора колонок, полей производится в зависимости от значения поля entityType все это подставляется в свой резалтмап но энтити один ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2013, 16:52:01 |
|
||
|
Hibernate замапить три класса на один энтити по условию.
|
|||
|---|---|---|---|
|
#18+
avalon12, мммм может тут покопать на предмет инициализации хибера Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2013, 17:17:55 |
|
||
|
|

start [/forum/topic.php?fid=59&gotonew=1&tid=2129636]: |
0ms |
get settings: |
14ms |
get forum list: |
20ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
39ms |
get topic data: |
9ms |
get first new msg: |
6ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
| others: | 316ms |
| total: | 476ms |

| 0 / 0 |
