|
|
|
Hibernate, Mapping & Postgres
|
|||
|---|---|---|---|
|
#18+
Добрый день, Дано: данные в разных таблицах, которые представляют собой некое дерево Hibernate сущностей (c 1:1 и 1:N связями). К примеру A и B находятся в отношении 1:N : Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Как видно из примера связь между сущностями не является класической Hibernate связью. Все это данность. Поменять нельзя. Задача: одним запросом вычитать A + связанные B (т.к. 1:N) причем каждая строка результата должна содержать A + связанные B. Pешение: На уровне DB это относительно просто: Код: plsql 1. 2. 3. Проблема заключается в том как результаты данного найтив запроса можно перегнать в сущности. Делаю так: Код: java 1. 2. 3. где Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Собственно проблема заключается в том что Код: java 1. Это просто строковая сериалицация массива элементов типа B. Вопрос: каким образом мне получить джава объекты A + связанные B? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2017, 01:20 |
|
||
|
Hibernate, Mapping & Postgres
|
|||
|---|---|---|---|
|
#18+
А почему у вас в классе "B" переменная "a" имеет тип Integer, она же должна быть типа "A". типа вот так вот: Код: java 1. 2. 3. 4. 5. и @Column(... вам тогда и не нужен будет, хибер сам создаст, если нет еще такого поля в таблице, a_id, а если есть, то будет работать с существующим. Причем создаст именно с таким именем. По запросу мне особо нечего сказать, так как использую обычно самые простые селекты, максимум с джойнами. Ждите других комментов :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2017, 08:07 |
|
||
|
Hibernate, Mapping & Postgres
|
|||
|---|---|---|---|
|
#18+
А да, аннотацию забыл поставить Код: java 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2017, 08:10 |
|
||
|
Hibernate, Mapping & Postgres
|
|||
|---|---|---|---|
|
#18+
bemtaillКак видно из примера связь между сущностями не является класической Hibernate связью. Все это данность. Поменять нельзя. Не обратил внимания, беру свои комменты тогда обратно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2017, 08:12 |
|
||
|
Hibernate, Mapping & Postgres
|
|||
|---|---|---|---|
|
#18+
Исправлять меппинг. Необходимость выполнения приведенных выше запросов подтверждает, что меппинг сделан с ошибками. Если совсем нельзя - смотреть в сторону NamedQuery, может, там удастся правильно замепить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2017, 09:36 |
|
||
|
Hibernate, Mapping & Postgres
|
|||
|---|---|---|---|
|
#18+
Проблему не очень понял bemtaillЭто просто строковая сериалицация массива элементов типа B. Вопрос: каким образом мне получить джава объекты A + связанные B? Наверное ответ очевиден: десериализовать А вот как это сделать, я не знаю, просто не делал. Читать документацию и сорцы PG. Формат raw данных как минимум можно посмотреть в C-ных сорцах, как реализовать объект B на Java - посмотреть как реализованы стандартные PG классы (PGbox, PGcircle, PGInterval, ... etc.) Сомневаюсь, что Hibernate такое умеет. Т.к. такой финт ушами явно не переносим между разными БД. А Hibernate все таки кросс-бд среда ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2017, 09:57 |
|
||
|
Hibernate, Mapping & Postgres
|
|||
|---|---|---|---|
|
#18+
Спасибо за ответы. Перед тем как постить вопрос я изучил все варианты и пришел к тем же выводам, но подумал что может я что-то упустил и можно сделать проще. Писать кастом десериалайзер для каждой сущности это проблематично, т.к. в реальности все сущности имеет конечно более сложную структуру. Была надежда что можно каким-то образом десериализовывать PGobject'ы используя Hibernate маппинг для этих объектов. Но похоже не получится и кроме как парсить строку другого выхода нет при данном подходе. Сделать правильный маппинг между сущностями не получится - это работы на год. Посмотрю как можно еще решить эту задачу с других сторон. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2017, 10:41 |
|
||
|
Hibernate, Mapping & Postgres
|
|||
|---|---|---|---|
|
#18+
что-то типа такого Код: java 1. 2. 3. 4. Код: xml 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2017, 11:36 |
|
||
|
Hibernate, Mapping & Postgres
|
|||
|---|---|---|---|
|
#18+
bemtaill, второпях не тот тег поставил. должно быть return-join Код: xml 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2017, 12:40 |
|
||
|
Hibernate, Mapping & Postgres
|
|||
|---|---|---|---|
|
#18+
bemtaill...Писать кастом десериалайзер для каждой сущности это проблематично... Для каждой и не надо. Надо парсер для стандартных типов которые встречаются в таблице. Строка таблица состоит обычно из этих типов. В Oracle, например, есть стандартная утилита пре-процессор, которая позволяет получать Java-обертки над объектами созданными в БД. Сделать универсальный десериалайзер или, на худой конец, свой генератор кода - вполне реально. IMHO Совершенно нормальная и понятная задача. С трудозатратами от недели до нескольких месяцев. Но ни как не годы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2017, 13:17 |
|
||
|
Hibernate, Mapping & Postgres
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev, Годы он говорил про исправление модели в базе. Т.к. в базе нет смысла депжать сериализацию. А если держать, то не делать запросы и маппинг. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2017, 13:21 |
|
||
|
Hibernate, Mapping & Postgres
|
|||
|---|---|---|---|
|
#18+
Petro123Годы он говорил про исправление модели в базе. Я не очень вижу, где в БД не та модель. Код: plsql 1. 2. 3. A и B - совершенно классическая связь 1 : N Другое дело, что стандартным SQL задачу: " одним запросом вычитать A + связанные B (т.к. 1:N) причем каждая строка результата должна содержать A + связанные B" В общем случае - не решить. Спасибо теоретикам реляционных баз данных. Были они больно умными и сильно далеки от народа. (вариант ivanra имеет ряд ограничений и недостатков) Другое дело, что нарушив правила нормализации и использовав ф-ции/возможности конкретной БД - вполне можно. Но вот здесь проблема. Что такие возможности, скорее всего (не смотрел), ни в ANSI SQL, ни в JDBC в полной мере не предусмотрены. Т.е. нужно делать "ручками" и код будет не переносимый между БД. Проблему я так понял. Может ошибаюсь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2017, 13:35 |
|
||
|
Hibernate, Mapping & Postgres
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev, Стандарт это же 2 таблы так же как и 2 класса по UML ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2017, 13:49 |
|
||
|
Hibernate, Mapping & Postgres
|
|||
|---|---|---|---|
|
#18+
Тоже не пойму задачу.))) Один запрос это одно множество. Исходных по моделт 2 множества..... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2017, 13:51 |
|
||
|
Hibernate, Mapping & Postgres
|
|||
|---|---|---|---|
|
#18+
Кстати, раз уж речь про postgresql, то данные из подчиненной таблицы можно засериализовать в xml/json, а на клиенте распарсить с помощью jaxb ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2017, 15:19 |
|
||
|
Hibernate, Mapping & Postgres
|
|||
|---|---|---|---|
|
#18+
{quote} Я не очень вижу, где в БД не та модель. {quote} В бд та, в коде не та. Посмотрите комментарии от Nixic. {quote} Проблему я так понял. Может ошибаюсь. {quote} Да, абсолютно верно. {quote} Кстати, раз уж речь про postgresql, то данные из подчиненной таблицы можно засериализовать в xml/json, а на клиенте распарсить с помощью jaxb {quote} Вы правы, но это не решает проблему из-за наличия различий в названии полей сущностей и названия столбцов в БД. {code} @Column(name = "a_id") private Integer a; {code} ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2017, 00:20 |
|
||
|
Hibernate, Mapping & Postgres
|
|||
|---|---|---|---|
|
#18+
блин, привык к Confluence )) Я не очень вижу, где в БД не та модель. В бд та, в коде не та. Посмотрите комментарии от Nixic. Проблему я так понял. Может ошибаюсь. Да, абсолютно верно. Кстати, раз уж речь про postgresql, то данные из подчиненной таблицы можно засериализовать в xml/json, а на клиенте распарсить с помощью jaxb Вы правы, но это не решает проблему из-за наличия различий в названии полей сущностей и названия столбцов в БД. Код: java 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2017, 00:23 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39437908&tid=2122984]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
54ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 199ms |
| total: | 346ms |

| 0 / 0 |
