Я должен был использовать представления несколько раз для того, чтобы сделать странные соединения и группироваться псевдонимами.
странными соединениями, я означаю выбирать список отличных дат и затем внешнего присоединения к ним назад к таблице, из которой они произошли получать пустые записи в течение пустых дней. Я не мог выяснить никакой другой способ сделать его.
Что касается группировки псевдонимами, это, казалось, зависело от сложности формулы в псевдониме. Если псевдоним не ссылался ни на какие фактические столбцы или столбцы, которые уже группировались, все было в порядке, но псевдонимы на столбцах, которые не были включены в группировку, бросали ошибки.
я, кажется, вспоминаю чтение или слушание где-нибудь в течение моих университетских дней, что выбор из представления был быстрее, чем выбор из набора объединяемых таблиц, но я не знаю если это правда.
Одно последнее преимущество использования представления: сводные таблицы в Excel. Я не думаю, что существует способ присоединиться к таблицам, или по крайней мере не в интерфейсе мастера. Могло бы быть возможно сделать, участвует в Microsoft Query, но я еще не попробовал, потому что мысль просто произошла со мной теперь.
Не раскрывайте сам сеанс в API данных. Вы по-прежнему можете делать это лениво, просто убедитесь, что гидратация выполняется каждый раз из потока данных . Вы можете использовать блок (исполняемый или какой-то другой класс команд, вероятно, лучшее, что Java может сделать для вас здесь, к сожалению), заключенный в код, который выполняет асинхронную загрузку из потока данных. Когда вы находитесь в коде пользовательского интерфейса (в потоке пользовательского интерфейса, конечно), поле своего рода событие «данные готовы», которое отправляется службой данных. Затем вы можете получить данные из использования события в пользовательском интерфейсе.
Есть две отдельные проблемы, которые следует решать отдельно:
Основная идея состоит в том, чтобы иметь сеанс для каждого кадра, исключая модальные кадры, которые используют сеанс порождающего кадра. Это непросто, но работает. Это означает, что вы больше не получите никаких LLE.
Я рекомендую хранить объекты гибернации строго в внутреннем потоке, из которого они происходят. Передавайте ETD только объекты-оболочки. Если эти объекты-оболочки запрашивают значение, они создают запрос, который передается внутреннему потоку, который в конечном итоге вернет значение.
Я бы предположил три вида реализаций оболочки:
Async : запрашивает значение и получает уведомление, когда значение доступно. Он немедленно вернется с некоторым фиктивным значением. При уведомлении запускается событие PropertyChange iO, чтобы проинформировать графический интерфейс об «измененном» значении (измененном с неизвестного на реальное значение).
Синхронизация : запрашивает значение и ожидает его доступности.
Timed : смесь двух, ожидающая короткое время (0,01) секунды, прежде чем вернуться. Это позволило бы избежать множества событий изменения по сравнению с асинхронной версией.
В качестве основы для этих оболочек рекомендуется использовать ValueModel библиотеки привязки JGoodies: http://www.jgoodies.com/downloads/libraries.
Вы можете посмотреть Ebean ORM . Это бессессионная загрузка, и ленивая загрузка просто работает. Это не отвечает на ваш вопрос, но действительно предлагает альтернативу.
Я знаю, что Ebean встроила поддержку асинхронного выполнения запросов, что также может быть интересно для вашего сценария.
Возможно, стоит взглянуть.