|
|
|
Как в Hibernate отобразить array объектов?
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток. В данный момент с целью самообразования изучаю Hibernate, так что просьба громко не пинать. Дано: Java 8, Hibernate 5. Есть класс промышленного девайса и класс адресуемого регистра: Код: 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. Как Гибернейт может отмапить массив (обычный array) объектов класса HoldingRegister в таблицу? Знаю, что обычно в данном случае применяются коллекции. Но стандартные коллекции с интерфейсом RandomAccess здесь не подходят по скорости работы. Индекс в массиве является адресом регистра, который приходит в сетевом пакете (протокол MODBUS). При этом обращения к регистрам регулярное и частое. Если отмапить массив объектов непосредственно нельзя, предполагаю задействовать вспомогательную коллекцию для загрузки объектов HoldingRegister и инициализации массива для работы (в конструкторе Device). Сохранять эти объекты нужно только в деструкторе класса Device. Так делать целесообразно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2018, 14:47 |
|
||
|
Как в Hibernate отобразить array объектов?
|
|||
|---|---|---|---|
|
#18+
Frame RelayНо стандартные коллекции с интерфейсом RandomAccess здесь не подходят по скорости работы.хибер работает с CRUD задачами. Если скорость работы с таблицей в виде коллекции вас не устраивает то вам не нужен ОРМ и хибер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2018, 15:08 |
|
||
|
Как в Hibernate отобразить array объектов?
|
|||
|---|---|---|---|
|
#18+
Сохранение состояния прибора в базе и восстановление из базы разве не относятся к категории CRUD? Там ещё может быть сохранение диапазона регистров (область уставок прибора) для имитации ЭНЗУ. Причём довольно частые. А работу с регистрами (читать-писать) и с сетью по промышленному протоколу можно считать бизнес-логикой (собственно полезной работой). Просто стандартные примеры (всякие магазины-аукционы-etc) скучны и банальны, да и разработка эмулятора для собственных нужд позволяет сочетать приятное с полезным. Но меня интересует именно вопрос отображения в таблицу массива объектов. Возможно ли такое вообще или только через промежуточную коллекцию? Мало ли что потом могут спросить на собеседовании. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2018, 15:25 |
|
||
|
Как в Hibernate отобразить array объектов?
|
|||
|---|---|---|---|
|
#18+
Frame Relayв таблицу массива объектов. по хорошему, массив это колонка у таблицы. По умолчанию старайтесь именно так маппить. Но вы можете объявить User тип колонки и фигачить внутрь блоб данные или всё что угодно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2018, 15:30 |
|
||
|
Как в Hibernate отобразить array объектов?
|
|||
|---|---|---|---|
|
#18+
Frame Relay, http://internetka.in.ua/hibernate-user-type-part1/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2018, 15:33 |
|
||
|
Как в Hibernate отобразить array объектов?
|
|||
|---|---|---|---|
|
#18+
Petro123по хорошему, массив это колонка у таблицы. По умолчанию старайтесь именно так маппить. Но как это сделать в приведенном мною примере? Если через аннотации. В "Java Persistence with Hibernate" ничего подобного нет, только через коллекции. Через реализацию UserType, понятное дело, можно. Но пока для меня сложно. БД для отображения может не иметь поддержки типа "массив" (пока юзаю MS SQL 2017). Если стандартными средствами Hibernate нельзя, пока реализую через промежуточную коллекцию, с инициализацией массива из оной и обновлением ея содержимого перед вызовом persist(). Всё равно необходима инициализация сетевого движка MODBUS перед непосредственно взаимодействием с клиентом. Впрочем, сначала даже буду работать непосредственно с коллекцией. Предполагаю юзать или ArrayList или что-то из map-ов (важна не только скорость поиска регистра по конкретному адресу, но и скорость доступа к последовательности адресов). Но в боевом режиме будет работа с парой сотен объектов Device, к каждому запрос раз в секунду. Если быстродействия не будет хватать, тогда использую массивы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2018, 16:59 |
|
||
|
Как в Hibernate отобразить array объектов?
|
|||
|---|---|---|---|
|
#18+
Отделите быстрый объект Device, который висит в памяти и что-то делает от медленного DeviceEntity который маппится на базу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2018, 17:04 |
|
||
|
Как в Hibernate отобразить array объектов?
|
|||
|---|---|---|---|
|
#18+
Frame Relay.... Впрочем, сначала даже буду работать непосредственно с коллекцией. Предполагаю юзать или ArrayList или что-то из map-ов (важна не только скорость поиска регистра по конкретному адресу, но и скорость доступа к последовательности адресов). Но в боевом режиме будет работа с парой сотен объектов Device, к каждому запрос раз в секунду. Если быстродействия не будет хватать, тогда использую массивы. ArrayList и есть реализация коллекции на основе массива. Т.ч. в чем может быть проблема со скоростью - не понятно если бы у Вас в массиве были атомарные типы (int,double...etc), то тогда стандартные коллекции давали бы жуткий over head мз-за необходимости boxing, unboxing (но и это решается выбором правильных коллекций). Но у Вас объекты. Т.ч. откуда взятся измеримой разнице межде ArrayList и чистым array - лично мне совершенно не понятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2018, 17:05 |
|
||
|
Как в Hibernate отобразить array объектов?
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev, Если хибер JPA умеют работать с ArrayList, то я не понимаю почему бы им не уметь работать точно так же и с массивами. В инете есть примеры маппинга для хибернейта. Но JPA, подозреваю, массивы не умеет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2018, 17:19 |
|
||
|
Как в Hibernate отобразить array объектов?
|
|||
|---|---|---|---|
|
#18+
Frame RelayНо как это сделать в приведенном мною примере? Если через аннотации. В "Java Persistence with Hibernate" ничего подобного нет, только через коллекции. Через реализацию UserType, понятное дело, можно. Но пока для меня сложно. я же сказал - пытаетесь сделать стандартно(коллекции) и потом показываете почему нельзя. Рисуете UML схему классов. Frame RelayБД для отображения может не иметь поддержки типа "массив" (пока юзаю MS SQL 2017). и оракл умеет массив загнать в одно поле, но я бы так не делал. Не универсально. Уж лучше User types BLOB ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2018, 17:19 |
|
||
|
Как в Hibernate отобразить array объектов?
|
|||
|---|---|---|---|
|
#18+
Petro123....и оракл умеет массив загнать в одно поле, но я бы так не делал. Не универсально. Уж лучше User types BLOB ссылку на доку плиз Насколько я понимаю, VARRAY сохраненные "якобы" в поле на самом деле разворачиваются во вложенные таблицы. Ну или мы говорим о разном. В общем, нужна ссылка на доку, что Вы подразумеваете под "массив загнать в одно поле" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2018, 17:30 |
|
||
|
Как в Hibernate отобразить array объектов?
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevНасколько я понимаю, VARRAY сохраненные "якобы" в поле на самом деле разворачиваются во вложенные таблицы. Ну или мы говорим о разном. В общем, нужна ссылка на доку, что Вы подразумеваете под "массив загнать в одно поле" Код: java 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2018, 18:06 |
|
||
|
Как в Hibernate отобразить array объектов?
|
|||
|---|---|---|---|
|
#18+
Да, был не прав. Попутал varray и nested table ((( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2018, 18:24 |
|
||
|
Как в Hibernate отобразить array объектов?
|
|||
|---|---|---|---|
|
#18+
Frame Relay Но стандартные коллекции с интерфейсом RandomAccess здесь не подходят по скорости работы. Индекс в массиве является адресом регистра, который приходит в сетевом пакете (протокол MODBUS). А почему не использовать mongoDB? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2018, 20:08 |
|
||
|
Как в Hibernate отобразить array объектов?
|
|||
|---|---|---|---|
|
#18+
Frame RelayСохранение состояния прибора в базе и восстановление из базы разве не относятся к категории CRUD? Там ещё может быть сохранение диапазона регистров (область уставок прибора) для имитации ЭНЗУ. Причём довольно частые. А работу с регистрами (читать-писать) и с сетью по промышленному протоколу можно считать бизнес-логикой (собственно полезной работой). Просто стандартные примеры (всякие магазины-аукционы-etc) скучны и банальны, да и разработка эмулятора для собственных нужд позволяет сочетать приятное с полезным. Но меня интересует именно вопрос отображения в таблицу массива объектов. Возможно ли такое вообще или только через промежуточную коллекцию? Мало ли что потом могут спросить на собеседовании. вариантов три - один ко многим, ембеддабл коллекшн (что почти тоже самое) и джейсонби с сериализатором в жейсон и обратно. выбирай какой нравится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2018, 22:42 |
|
||
|
Как в Hibernate отобразить array объектов?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczLeonid Kudryavtsev, Если хибер JPA умеют работать с ArrayList, то я не понимаю почему бы им не уметь работать точно так же и с массивами. В инете есть примеры маппинга для хибернейта. Но JPA, подозреваю, массивы не умеет. кастом атрибьютс )) правда, работа через жпкл с ним имхо, невозможна. ну или я не нашел. а вот со спецификациями, и вызовом втроенных постгрес функций (если речь о нем) - то вполне себе комфортно. в рамках разумного конечно же. я так понимаю, автора особо не парит отсутствие реляции в таком случае. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2018, 22:46 |
|
||
|
Как в Hibernate отобразить array объектов?
|
|||
|---|---|---|---|
|
#18+
Всем спасибо за помощь. Первоначально буду использовать ArrayList (т.е. стандартны способ). Но если быстродействия всё-таки не хватит (пара сотен Device и даже более), то буду пробовать другие варианты, приведенные ниже (сначала UserType). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2018, 10:34 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39632606&tid=2122106]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
173ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 236ms |
| total: | 501ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...