Size: a a a

2021 July 12

ch

central hardware in pro.jvm
вопрос явно для @javastart думаю каждый кто использовал дженерики натыкался на проблемы из-за type erasure
источник

I

Iseedeadpeople in pro.jvm
Перегрузка методов с дженерик аргументами, например
источник

HH

Human Human in pro.jvm
Да, точно вспомнил про type erasure проблемы. Видимо уже так привык к отсутствию фичей, что уже и не вижу их
источник

I

Iseedeadpeople in pro.jvm
Комплексные копания внутрь с помощью рефлексии, в случае если нужно понять какие дженерики, как сочетаются (в случае тех же аргументов).
В дарте, например, такой проблемы нет
источник

A

Aleksandr in pro.jvm
Обращаюсь к магам-знатокам спринговых проксей для спринга. Смотрите, у меня следующая ситуация:
1. Имею слой сервиса
2. Имею слой JPA, который наследуется от Spring Data

Проблема, с которой столкнулся, заключается в следующем:
Сервис оборачивается в CGLib proxy, а вот JPA репозиторий в JDK Dynamic proxy.
Из-за этого у меня не распространяется транзакция на дальнейший вызов у репозитория.
Т.е в самом JPA я имею некие кастомные запросы (native queries), который выполняют стандартные CRUD операции.

Пытался решить эту проблему следующими путями:
1. Добавлением специального конфига

>The proxyTargetClass property sets whether the dynamic proxy uses the JDK dynamic proxy or the CGlib proxy, true uses the CGlib
@EnableAspectJAutoProxyproxyTargetClass = false)

2. Пытался наследовать класс сервиса от пустого интерфейса

>By default, JDK dynamic proxy is used to create a proxy if the target object only implements any interface. Methods in all interfaces implemented by this object are enhanced by the proxy. If the target object does not implement any interfaces, CGLIB will be used to proxy.


Но все мои попытки оказались бессчетны.
источник

AG

Alexey Genus in pro.jvm
Думаю, что проблема не в проксях. Работать должно с разными типами прокси, у меня такое везде в коде и всё нормально.
Насчёт этого момента: "Из-за этого у меня не распространяется транзакция на дальнейший вызов у репозитория.” Как это проявляется?
источник

A

Aleksandr in pro.jvm
Ну как проявляется. Не выполняется транзакция, вот и всё. Т.е не происходят те изменения, которые описаны на уровне jpa.
источник

VZ

Viktor Zub in pro.jvm
Проверь
может аннотация @Transactional не с того пакета импортирована
у меня кент с таким стикался
источник

VK

Vladislav Kuzmenko in pro.jvm
@Modifying в репошке пробовали?
источник

A

Aleksandr in pro.jvm
Да всё так импортировано. У меня этот код вызывается в других местах, все работает. Проблема именно при взаимодействии с сервисом, который помечен как transactional. Мне кажется, что это из-за разных проксей.
источник

A

Aleksandr in pro.jvm
Не поверите, но без этой аннотации у меня бы не завелась бы квери.
источник

AG

Alexey Genus in pro.jvm
Я бы включ иллогирование SQL в приложении или в базе и посмотрел бы что там происходит
источник

A

Aleksandr in pro.jvm
А там ничего не происходит.
источник

AG

Alexey Genus in pro.jvm
Ну вряд ли дело в проксях, если честно. Хотя бы BEGIN какой-нибудь должен попадать туда. Значит, надо врубать trace-логирование спринга и смотреть
источник

A

Aleksandr in pro.jvm
Если вызывать методы по отдельности, то все прекрасно проходит. В этом и вся абсурдность.
источник

AG

Alexey Genus in pro.jvm
Ну значит, надо поставить брейпоинт
источник

A

Aleksandr in pro.jvm
И что это даст? Просто сам по себе этот метод не вызывается. Вы точно уверены, что у вас разные прокси друг с другом дружат?
источник

ДР

Даниил Разоренов... in pro.jvm
А почему они не должны дружить?
источник

ДЗ

Динар Зарипов... in pro.jvm
остальные методы нормально отрабатывают? Может там исключение вылетает
источник

AG

Alexey Genus in pro.jvm
Какой метод не вызывается? Как это?
Конечно, уверен, нет никакой разницы в том, какие прокси где
источник