powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate Spring Transaction
24 сообщений из 49, страница 2 из 2
Hibernate Spring Transaction
    #39417593
natanabrahamjr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123natanabrahamjr,
и не забудь, что у профи выходные).
Петр.. я создавал И через екзекутор (что с пакета канкарренси) И через аннотацию асинк . Уфф. яж не совсем дибил да ...НЕ ПАШЕТ :) вернее, не пашет так, как надо мне.

причем, если сам создаю через екзекутор то оно просто игнорирует аннотацию транзакшнл, если создаю через асинк - тогда с этой аннотацией тупо падает вообще.

раз ни у кого проблемы нет - может у меня проблема в конфиге?
...
Рейтинг: 0 / 0
Hibernate Spring Transaction
    #39417594
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
natanabrahamjrтогда с этой аннотацией тупо падает вообще.
Так тупо падает, что ни сообщения об ошибке ни стэка? А есть понимание что JDBC он однопоточный? Одна транзакция на разные потоки может не работать.
...
Рейтинг: 0 / 0
Hibernate Spring Transaction
    #39417603
natanabrahamjr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicznatanabrahamjrтогда с этой аннотацией тупо падает вообще.
Так тупо падает, что ни сообщения об ошибке ни стэка? А есть понимание что JDBC он однопоточный? Одна транзакция на разные потоки может не работать.


Код: java
1.
java.util.concurrent.ExecutionException: org.springframework.dao.InvalidDataAccessResourceUsageException: could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet



говорит вот это вот.

ждбс однопоточный... и что? есть приложение, есть контейнер, который генерит эти потоки десятками. и ничего не мешает ждбсу работать не зная, что он однопоточный.

я просто подсознательно понимаю, что всё просто. но где ошибка - не пойму.

я вот никак не разумею, такие задачи что надо на джей-мс выносить или какой-нибудь раббит-мк по хорошему?
...
Рейтинг: 0 / 0
Hibernate Spring Transaction
    #39417613
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
natanabrahamjrждбс однопоточный... и что?
Не, ничего. Всё нормально. Ты, походу, сам в курсе всего. Исключения хотя бы читать научись, чтобы источник его найти, а не самое верхнее сообщение об ошибке.
...
Рейтинг: 0 / 0
Hibernate Spring Transaction
    #39417724
natanabrahamjr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicznatanabrahamjrждбс однопоточный... и что?
Не, ничего. Всё нормально. Ты, походу, сам в курсе всего. Исключения хотя бы читать научись, чтобы источник его найти, а не самое верхнее сообщение об ошибке.
ну скажем так это самое громкое. вот еще есть такое:

авторCaused by: org.springframework.dao.InvalidDataAccessResourceUsageException: could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet


еще ругается что не может найти таблицу.

собссно всё.. вы думаете, я бы тут мучался второй день если бы что-то читаемое было в логе?

меня вполне удовлетворит просто знание того что асинк+транзакшнл вообще и в принципе использовать МОЖНО. ну или не можно.
...
Рейтинг: 0 / 0
Hibernate Spring Transaction
    #39417727
natanabrahamjr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
источник исключения - это первое же обращение к базе через репозиторий внутри метода помеченного асинк и транзакшнл.
...
Рейтинг: 0 / 0
Hibernate Spring Transaction
    #39417734
natanabrahamjr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в общем, судя по мануалу, работать должно как есть. но не работает.
...
Рейтинг: 0 / 0
Hibernate Spring Transaction
    #39417797
natanabrahamjr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в общем.. по ходу кажется решил.. :) точно должно работать как есть без дополнительной порнографии.

Определил бин екзекьютора в яваконфиге бута на concurrent.ThreadPoolTaskExecutor, и явно указал асинку пользоваться именно этим бином.

Аллиллуя!
...
Рейтинг: 0 / 0
Hibernate Spring Transaction
    #39417897
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
natanabrahamjrв общем, судя по мануалу, работать должно как есть. но не работает.
Нет никаких "должно" - есть конкретные требования - один поток, одна транзакция. Не нужно пытаться продолжить текущую транзакцию в Async методе.
Нет никаких "не работает". Есть конкретные исключения, сообщения об ошибках или не верное диагностическое состояние. Что именно происходит? Исключение? В какой момент? stacktrace мы так и не увидим. Корневое сообщение об ошибке тоже, похоже, тайна покрытая мраком.
...
Рейтинг: 0 / 0
Hibernate Spring Transaction
    #39417925
natanabrahamjr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Блакович, так я и не пытался "продлить" транзакцию. я просто хотел иметь транзакцию, дабы был доступ к лейзи полям. пусть будет новая транзакция - ни разу не проблема. у меня же приложение ложилось, если я просто ставил анноташку транзакшнл.

фулстэктрейс в атаче.
...
Рейтинг: 0 / 0
Hibernate Spring Transaction
    #39417937
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczНет никаких "должно" - есть конкретные требования - один поток, одна транзакция. Не нужно пытаться продолжить текущую транзакцию в Async методе.


А как это требование налазит на вложенные транзакции кстати?

То есть поможет OP propagation Requires_New ?
...
Рейтинг: 0 / 0
Hibernate Spring Transaction
    #39417946
natanabrahamjr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerBlazkowiczНет никаких "должно" - есть конкретные требования - один поток, одна транзакция. Не нужно пытаться продолжить текущую транзакцию в Async методе.


А как это требование налазит на вложенные транзакции кстати?

То есть поможет OP propagation Requires_New ?

мануал говорит что выходя в параллельный тред область видимости "родительской" транзакции заканчивается.

блин.. прикрутил новый екзекьютор, так у меня приложение стало собираться вдвое дольше

а вообще, по большому счету там нет вообще никаких вложенных транзакций в спринге (в контексте одного треда). есть где транзакция открыфвается, и где она заканчивается. всё что внутри - тупо игнорируется. бо выкидывая ексепшн в любой из дочерних валится всё-равно всё. т.е. можно рассматривать всё как одна транзакция - остальные анноташечки - это только красота.

кстати, хороший вопрос для собеседования:

у вас есть аспект до метода, у вас есть метод, метод помечен транзакцией. во время выполнения аспекта у вас выбрасывается эксепшн - что будет с данными внутри метода? :)
...
Рейтинг: 0 / 0
Hibernate Spring Transaction
    #39417962
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
natanabrahamjrБлакович, так я и не пытался "продлить" транзакцию.

А мне откуда знать. Я кода кроме как Transaction Template не видел. Где код, который создаёт новую транзакцию.

natanabrahamjr я просто хотел иметь транзакцию, дабы был доступ к лейзи полям.

OMFG. То есть мы ещё и транзакцию от сессии отличить не можем? Это как бы совершенно разные вещи. То что у них одинаковая область действия ещё не делает их одним и тем же.

natanabrahamjrпусть будет новая транзакция - ни разу не проблема.

Блин.
В чем конкретно задача? Мы на второй странице, вдруг, выяснили что нужна не транзакция а сессия. Что вообще значит "пусть будет"? Вы понятия не имеете как должна работать программа?
...
Рейтинг: 0 / 0
Hibernate Spring Transaction
    #39417964
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerА как это требование налазит на вложенные транзакции кстати?
То есть поможет OP propagation Requires_New ?
Это не вложеная транзакция, а новая.
...
Рейтинг: 0 / 0
Hibernate Spring Transaction
    #39417965
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
natanabrahamjrдабы был доступ к лейзи полям
То что JDBC не многопоточный повторять бесполезно? Всё равно будет проигнорировано?
...
Рейтинг: 0 / 0
Hibernate Spring Transaction
    #39418030
natanabrahamjr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

мы с вами кажется, не очень друг-друга понимаем. Я вас понимаю, и про ждбс и про транзакции и про всё остальное, что там в потрохах происходит.

давайте от всего этого абстрагируемся. а поднимемся на уровень выше - на уровень спринга с его структурой-архитектурой и т.п.

1) если я хочу получить объект с базы -- я делаю через репозиторий гет-ван запрос и получаю объект.
2) чтобы прочесть у этого объекта есть лейзи поля, то они будут доступны в двух случаях:

а) поле не лейзи, а игер.
б) мы запрашиваем лейзи поля в методе, помеченном транзакшнл.

--- как бы на этом ВСЁ. в детали вдаваться смысл есть только из академического интереса, ибо ломать спринговую архитектуру и начинать прыгать через голову, через контекст открывать-закрывать сессии, а уж тем более коннекты к базе - это имхо, ни разу не вариант, изобретать велосипеды с костылями.
...
Рейтинг: 0 / 0
Hibernate Spring Transaction
    #39418068
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczquestionerА как это требование налазит на вложенные транзакции кстати?
То есть поможет OP propagation Requires_New ?
Это не вложеная транзакция, а новая.

Сорри, новая.

Ну и видимо должно помочь, если если это допускают требования
...
Рейтинг: 0 / 0
Hibernate Spring Transaction
    #39418251
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
natanabrahamjrЯ вас понимаю, и про ждбс и про транзакции и про всё остальное, что там в потрохах происходит.
Вы себе льстите.

natanabrahamjrа) поле не лейзи, а игер.
б) мы запрашиваем лейзи поля в методе, помеченном транзакшнл.

--- как бы на этом ВСЁ.

Потому что нихера не ВСЁ. Потому что Session aka EntityManager aka Unit of Work это не транзакция. Потому что ленивые свойства грузятся из сессии, а не транзакции. И грузятся они через JDBC, поэтому сессию нет смысла шарить между потоками.
Да, в спринге, по-умолчанию, сессия ORM и транзакция связаны друг с другом. Но это совершенно не повод их мешать в кучу.


natanabrahamjrв детали вдаваться смысл есть только из академического интереса
Ну-да, ну-да. Это сродни фразе "SQL знать не нужно, Hibernate сам всё сделает".

natanabrahamjrибо ломать спринговую архитектуру и начинать прыгать через голову, через контекст открывать-закрывать сессии, а уж тем более коннекты к базе - это имхо, ни разу не вариант, изобретать велосипеды с костылями.
Чтобы найти правильное решение нужно понимать что на самом деле происходит, а не разводить демагогию по поводы "архитектуры", не понимая даже что под этим подразумевается.

Теперь к решению.
Попробуйте получить текущую сессию и вызвать merge на объекте. После этого должны заработать ленивые свойства.
Вот тут пишут что @Async и @Transactional на одном методе уже починили.
Значит дело за малым - "переподключить" ленивую сущность к новой сессии.
...
Рейтинг: 0 / 0
Hibernate Spring Transaction
    #39418255
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerСорри, новая.
Ну и видимо должно помочь, если если это допускают требования
Да, должно и по-умолчанию работать с REQUIRE, потому как в новом потоке (@Async) всё равно нет старой транзакции, поэтому будет создана новая.
...
Рейтинг: 0 / 0
Hibernate Spring Transaction
    #39418262
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
natanabrahamjrфулстэктрейс в атаче.
Корневое и самое любопытное исключение
аттачorg.postgresql.util.PSQLException: ERROR: relation "donations" does not exist
А точно ленивые свойства грузятся без @Async? Либо таки дело не в Async, либо новый поток вообще не в ту базу законектился, что очень странно.
...
Рейтинг: 0 / 0
Hibernate Spring Transaction
    #39418307
natanabrahamjr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так я вам об этом и говорю. Там ощущение, что коннекта нет вообще. Без асинка всё работает прекрасно. С асинком и без анноташки транзакшнл - тоже всё работает. с аннотацией транзакшнл и без асинка тоже работает. с асинком + транзакшнл (либо над асинком либо в методе, вызывающемся из асинка) -- нет. выходит то, что вы видите.

Если я без асинка запускаю через обычный екзекутор (не спринг бин, а просто екзекутор, с методом, возвращающим футуру) - то с транзакшнл работает, но при обращении к лейзи связи - падает. говорит ноу сейшн.

Если я в этом методе без асинка ручками через ентити менеджер создаю сессию, далее дергаю сущность простым склом не закрывая сессию - все лейзи связи доступны (сущность типа как приаттаченая выходит). всё работает.


а теперь... если я в блоке конфигурации создаю ЯВНО езекутор, вернее, бин екзекутора, возвращающий тредпултаскекзекутор - то вуаля, всё замечательно пашет. даже асинку говорить не надо какой бин цеплять для асинхронного исполнения.
Причем, пашет в любой комбинации, в т.ч. с асинк+транзакшнл. в рамках метода, который я обозначил этими анноташками. Т.е. проблема, как бы, решена.



зы. спасибо в любом случае за помощь Вам. Я не претендую на глубокое знание всех процессов, проходящих где то там в дебрях. Только сверху. Полагаю, знать это в деталях конечно же надо, но через ентитименеджер фигачить сессии, скл запросы (на уровне сервиса) и т.п. - это уж слижком.
...
Рейтинг: 0 / 0
Hibernate Spring Transaction
    #39418310
natanabrahamjr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по моему вопросу.. я так полагаю, что у других он не возникал потому что у меня банально какие то особенности с конфигом непосредственно моего приложения.
...
Рейтинг: 0 / 0
Hibernate Spring Transaction
    #39418331
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
natanabrahamjrа теперь... если я в блоке конфигурации создаю ЯВНО езекутор, вернее, бин екзекутора, возвращающий тредпултаскекзекутор - то вуаля, всё замечательно пашет. даже асинку говорить не надо какой бин цеплять для асинхронного исполнения.
Вот это совсем странно. Spring же там свой экзекутор использует, если его не указать явно. Какая между ними принципиальная разница?
...
Рейтинг: 0 / 0
Hibernate Spring Transaction
    #39418349
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что за поток такой ?
аттач[pool-27-thread-1] o.h.e.j.b.i.AbstractBatchImpl HHH000010: On release of batch it still contained JDBC statements
Может там, таки транзакция или сессия умудрилась зашарится между потоками, потому как
ERROR: relation does not exist
происходит далее как в асинхронных методах SimpleAsyncTaskExecutor-XX, так и в основном методе из web.
...
Рейтинг: 0 / 0
24 сообщений из 49, страница 2 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate Spring Transaction
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]