Используя ваш подзапрос DerivedTable
, вы можете написать:
SELECT coalesce(DerivedTable.vol, 0) AS vol,
y.year
FROM (VALUES ('2018'::text)) AS y(year)
LEFT JOIN (SELECT ...) AS DerivedTable
ON DerivedTable.year = y.year;
Еще раз, после нескольких часов пытаясь отладить это, я нахожу ответ сразу после публикации на StackOverflow.
Ключевым моментом, который я не упомянул в своем вопросе, является то, что InnerThread имеет транзакционный метод (извините, что это не имеет значения). Это важное различие между OuterThread и InnerThread.
Из документации Spring :
Примечание
Несколько разделов сворачиваются в единую унифицированную программу создания автопрокси-сервера во время выполнения, которая применяет самые сильные настройки прокси, чем любой из разделов (обычно из различные файлы определения компонентов XML). Это также относится к элементам и.
Для ясности: с использованием 'proxy-target-class = "true"' on, иначе элементы заставят использовать прокси CGLIB для всех трех из них.
Добавление приведенной выше строки к моей конфигурации (на основе persistance-context.xml, которую вы можете видеть загруженной выше), похоже, решает проблему. Однако я думаю, что это может быть быстрый обходной путь, а не реальное решение.
Я думаю, что у меня здесь несколько более глубоких проблем, первая из которых заключается в том, что Spring мне кажется такой же запутанной, как и удаление ругательств. Во-вторых, мне, вероятно, следует использовать TaskExecutor Spring для запуска моих потоков. В-третьих, мои потоки должны реализовывать Runnable вместо расширения Thread (см. Вопрос SO ниже).
См. Также
Это всего лишь предположение, но попробуйте создать интерфейс InnerThreadInterface, а затем позвольте классу InnerThread расширить его.
После этого вы сможете сделать:
InnerThreadInterface inner = ctx. getBean ("innerThread", InnerThread.class);
У меня была эта проблема, хотя я ссылался на CGLIB и использовал настройку proxy-target-class = "true". Я решил, что виноват тег ehcache: annotation ... Удаление следующей конфигурации решило эту проблему. К счастью, я смог использовать кэширование уровня гибернации 2 вместо декларативного кеширования ehcache.
<ehcache:annotations>
<ehcache:caching id="myCacheModel" cacheName="myCache"/>
<ehcache:flushing id="myFlushModel" cacheNames="myCache" when="after"/>
</ehcache:annotations>
Другой способ решения этой проблемы - реализовать интерфейс и запросить интерфейс у Spring, прокси-сервер полностью реализует интерфейс, и при приведении не должно возникнуть проблем.