|
StoredProcedureQuery registerStoredProcedureParameter JSONObject как? )
|
|||
---|---|---|---|
#18+
Всем привет! Переписываю тут с C# на Java сервис небольшой и вот используется Postgres и в нем процедура, которая принимает json на вход. Я раньше такое не использовал, всегда простые типы передавал, а тут json парсится уже внутри процедуры и данные идут дальше. Начал гуглить и ничего толком не нашел, кроме как переписать процедуру в постгресе) Но на это вряд ли пойдут, так как C# сервис тоже будет использоваться и придется и в нем переписывать коллегам. В общем пытаюсь сделать так: Код: java 1. 2. 3.
и получаю на 2-й строке ошибку java.lang.IllegalArgumentException: Type cannot be null Ну ладно, думаю, отдам тебе String. И получаю от постгреса отворот-поворот: Код: powershell 1. 2. 3. 4.
Что вот с этим всем делать - не знаю :) Может кто подскажет? Спасибо. Буду, конечно, еще искать варианты. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2019, 18:26 |
|
StoredProcedureQuery registerStoredProcedureParameter JSONObject как? )
|
|||
---|---|---|---|
#18+
Nixic, https://www.programcreek.com/java-api-examples/index.php?api=org.postgresql.util.PGobject https://stackoverflow.com/questions/35844138/how-can-i-insert-json-object-into-postgres-using-java-preparedstatement ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2019, 18:58 |
|
StoredProcedureQuery registerStoredProcedureParameter JSONObject как? )
|
|||
---|---|---|---|
#18+
Хотя, это для JDBC, а у вас JPA. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2019, 19:01 |
|
StoredProcedureQuery registerStoredProcedureParameter JSONObject как? )
|
|||
---|---|---|---|
#18+
NixicБуду, конечно, еще искать варианты. ИМХО, ищите в сторону имплементации своего собственного типа (копать от org.hibernate.usertype.UserType). Надеюсь, кто-то подскажет способ проще (для Hibernate). ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2019, 19:14 |
|
StoredProcedureQuery registerStoredProcedureParameter JSONObject как? )
|
|||
---|---|---|---|
#18+
Nixic, Ничего не понял. В шарпе json в хранимку передается как строка. Так? И хранимка уже есть в постгри. Так? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2019, 21:01 |
|
StoredProcedureQuery registerStoredProcedureParameter JSONObject как? )
|
|||
---|---|---|---|
#18+
Lelouchпроще (для Hibernate).хибер вообще не нужен для json. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2019, 21:02 |
|
StoredProcedureQuery registerStoredProcedureParameter JSONObject как? )
|
|||
---|---|---|---|
#18+
Nixicпереписывать коллегам.они зря json начали пихать в базу. Вы можете написать рядом свою хранимку с параметром строка и внутри вызвать их хранимку с параметром json. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2019, 21:07 |
|
StoredProcedureQuery registerStoredProcedureParameter JSONObject как? )
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, Ну лично у нас используется, как раз через UserType. Проблем не наблюдается. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2019, 01:11 |
|
StoredProcedureQuery registerStoredProcedureParameter JSONObject как? )
|
|||
---|---|---|---|
#18+
PetroNotC SharpВ шарпе json в хранимку передается как строка. Так? И хранимка уже есть в постгри. Так? Код: powershell 1. 2. 3.
Не, в хранимку передается как раз тип json, судя по коду, хотя я не очень хорошо разбираюсь в этом коде, как и в C# )) Затем из json вытаскивается значение, как-то так: Код: powershell 1.
И используется уже другими процедурами. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2019, 08:30 |
|
StoredProcedureQuery registerStoredProcedureParameter JSONObject как? )
|
|||
---|---|---|---|
#18+
LelouchPetroNotC Sharp, Ну лично у нас используется, как раз через UserType. Проблем не наблюдается. Да, спасибо, видимо так и нужно делать. Я уже использовал UserType для одной сущности, но для чтения, в GET запросе. Правда использовал com.google.gson.JsonObject, а не org.json.JSONObject, нужно будет почитать про особенности и отличия этих типов в доках, а то я пока просто их использовал особо не задумываясь. JSONObject отлично подошел, чтобы возвращать из GET запросов многоуровневые json'ы :) JsonUserType Код: 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. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112.
В ентити прописал так: SomeEntity Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
В итоге получаю json в нормальном его виде для src, что-то типа { "src": {...}} со множеством вложенных элементов, как раз такой как нужно фронту. А вот с отправкой через POST да еще в процедуру пока не использовал. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2019, 08:48 |
|
StoredProcedureQuery registerStoredProcedureParameter JSONObject как? )
|
|||
---|---|---|---|
#18+
NixicЗатем из json вытаскивается значение, как-то так:я и написал что зря они так сделали. Такой тип не тащат в базу. UserType я считаю оверхед и ненужное усложнение. Как и хибернейт. Он для маппинга. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2019, 12:51 |
|
StoredProcedureQuery registerStoredProcedureParameter JSONObject как? )
|
|||
---|---|---|---|
#18+
Nixic, Почему нельзя добавить хранимку обертку вы не ответили. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2019, 12:52 |
|
StoredProcedureQuery registerStoredProcedureParameter JSONObject как? )
|
|||
---|---|---|---|
#18+
Nixicкак раз такой как нужно фронту.в шарпе и java модель в базе делают без json, xml и так далее. Простыми типами. А потом уже в аппСервере только для передачи на фронт КОНВЕРТИРУЮТ в json. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2019, 12:56 |
|
StoredProcedureQuery registerStoredProcedureParameter JSONObject как? )
|
|||
---|---|---|---|
#18+
NixicДа, спасибо, видимо так и нужно делать.-1 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2019, 13:02 |
|
StoredProcedureQuery registerStoredProcedureParameter JSONObject как? )
|
|||
---|---|---|---|
#18+
PetroNotC SharpNixicкак раз такой как нужно фронту.в шарпе и java модель в базе делают без json, xml и так далее. Простыми типами. А потом уже в аппСервере только для передачи на фронт КОНВЕРТИРУЮТ в json. Так и есть частично, но есть такая штука как различные графики джаваскриптовые с кучей полей своих и все их в бд тащить, как-то не очень хорошо, в силу постоянно меняющегося API javascript проще закинуть туда json, и да, лучше это делать в String. И так сейчас фронт иногда ловит баги в виду того, что старые сохраненные ранее json в БД имеют/или уже не имеют тех полей, которые требуются джаваскриптовым компонентам. Частично в БД реализовано так, что на вход идёт именно json, в C# видимо с таким проблем особо нет и какие-то их либы это легко отправляют, я подробнее не изучал. Еще судя по десяткам процедур, которые уже есть в бд, они работают именно с json типом, своими методами работы с json, всё это переписывать явно не будут, тем более, что сервис на C# будет дальше работать. Но так как не у всех сервера на винде, то нужен сервис, который будет работать под линукс. Когда начинал переписывать сервис, то процедуры заранее не изучал, да и оценку времени на эту задачу делал не я, а другой разработчик, который тоже не ожидал, что будет вот так вот. Кроме того, вся эта махина используется для OLAP, который так же выдвигает некоторые требования к типу данных. В общем всё сложно))) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2019, 13:54 |
|
StoredProcedureQuery registerStoredProcedureParameter JSONObject как? )
|
|||
---|---|---|---|
#18+
PetroNotC SharpNixic, Почему нельзя добавить хранимку обертку вы не ответили. Это я уточню, спасибо. В понедельник уже. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2019, 13:54 |
|
StoredProcedureQuery registerStoredProcedureParameter JSONObject как? )
|
|||
---|---|---|---|
#18+
Nixic, Да. OLAP это денормализованные данные. Там пофиг что хранить, пусть даже сам блоб. Тогда свою хранимку со строкой и сказать что в java знать о типе json совсем нет необходимости. Валидацию json не делаем. Что есть в бд, строкой прочитали и отправили на http клиент. Аппсервер olap в java в роли импотента REST. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2019, 15:08 |
|
StoredProcedureQuery registerStoredProcedureParameter JSONObject как? )
|
|||
---|---|---|---|
#18+
PetroNotC SharpUserTypeесли просто читать из хранимки и передать json то это не нужно. Это нужно, если в базе ОLTP неизветный в java тип его НАДО В КЛАССЫ ИЛИ КОЛЛЕКЦИЮ. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2019, 15:15 |
|
StoredProcedureQuery registerStoredProcedureParameter JSONObject как? )
|
|||
---|---|---|---|
#18+
Решение оказалось относительно простым, hibernate не мог кастануть ответ от функции в json. То есть получалось отправить входящий параметр в функцию в формате json через свой UserType. А вот возвращала функция тип Types.OTHER И никак нельзя кастануть это в Types.JAVA_OBJECT В итоге сделали по другому, кастуем объекты в нужные типы на уровне постгреса: Код: java 1. 2. 3.
Вопрос закрыт, всем спасибо :) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2019, 13:41 |
|
|
start [/forum/topic.php?fid=59&fpage=26&tid=2121238]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
75ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 201ms |
0 / 0 |