Java EE 6. Обзор JPA 2.0, часть 1: Введение


    Пожалуй, наибольшее количество изменений с выходом спецификации Java EE 6 было привнесено в JPA (Java Persistence API). В серии статей, начиная с этой, я планирую рассказать подбробно о каждом из нововведений.

    Введение


    Технология JPA является абстракцией над JDBC и позволяет быть независимым от SQL. Все классы и интерфейсы JPA расположены в пакете javax.persistence, основными составляющими технологии являются:
    • ORM (механизм объектно-реляционного отображения);
    • Entity manager API — позволяет осуществлять базовые операции CRUD;
    • JPQL и Criteria API — механизмы извлечения данных;
    • Управление транзакциями и блокировками (как с использованием JTA, так и без);
    • Механизмы обратных вызовов и listener-ов.


    В JPA 2.0 изменения коснулись следующего:
    • Улучшилась поддержка Map-ов: теперь как ключ, так и значение могут быть простым типом, сущностью или встроенным объектом (embedded);
    • Коллекции встроенных объектов и простых типов (Integer и т.д.) могут теперь быть вынесены в отдельные таблицы. Ранее в отдельные таблицы было возможно выносить только коллекции сущностей;
    • Появилась возможность управлять упорядоченностью персистентных объектов с помощью аннотации @OrderColumn;
    • Появилась возможность удалять объекты-сироты (orphan removal): при удалении родительского объекта удаляется и дочерний;
    • Появилась поддержка пессимистической блокировки (оптимистическая поддерживается с JPA 1.0);
    • Новый Query Definition API, который позволяет строить запросы в стиле ООП (в противовес написание в строке JPQL запросов);
    • Сильно расширились возможности JPQL (язык запросов в JPA);
    • Встроенные (embedded) объекты теперь могут входить в состав других встроенных объектов, а также участвовать в связях с сущностями. Навигация по графу объектов с помощью точки была расширена и для использования со встроенными объектами;
    • Добавилась поддержка нового API для кэширования.


    В данный момент единственным провайдером JPA 2.0 является EclipseLink, он же является reference implementation JPA 2.0. Пользуюсь им уже несколько месяцев и готов сказать, что нахожу этот проект очень стабильным.

    В следующей статье я расскажу о нововведениях в декларировании ORM.

    Java EE 6. Обзор JPA 2.0, часть 2: Коллекции
    Поделиться публикацией
    Ой, у вас баннер убежал!

    Ну. И что?
    Реклама
    Комментарии 10
      +2
      Хочется больше узнать о поддержке типа данных uuid. В том числе и в качестве primary key.
        +1
        В следующей статье цикла расскажу об организации маппинга. Затрону этот вопрос
          0
          Спасибо, а то с uuid у меня постоянные проблемы, начиная со spring и заканчивая hibernate.
        0
        В последнее время заинтересовался, и встретился с проблемой — существуют тысячи реализаций одного и того же, с десятками развиваемых веток в границах даже одного наименования.
        Книг — тоже сотни, и создается впечатление, что разобраться в них может только человек, который уже прочел их.
        Потому: Не затруднит ли вас опубликовать Ваш ответ на вопрос:
        Не могли бы Вы посоветовать с чего учить современную Java EE и близкие технологии?
          0
          Самый, думаю, правильный ответ — идти работать в этой сфере. Желательно не на поддержке старых проектов, а на вновь стартующих. И все придет :-)
            0
            Из близких технологий очень удобны фреймворки типа Grails и Spring. Во всяком случае, это хорошая точка входа в java для веба, а оттуда и до J2EE недалеко. Тем более что Spring, насколько я понимаю, весьма тесно может быть интегрирован с J2EE-стеком
              0
              JavaEE учить с JSF, EJB, JPA и WebBeans.
              Близкие технологии — со Spring, GWT и IBatis
                0
                Если английским более-менее то вот статья Java Enterprise Development — 2010 style.
                  0
                  Есть такая задача.
                  Имеется комплекс ПО по схеме трёхзвенка.
                  Толстые клиенты общаются с OSGI-сервером, он, в свою очередь, общается с БД

                  В качестве ORM избрали Hibernate.
                  Чтобы не тянуть все зависимости объекта сразу, сделали загрузку ленивой.
                  Но ленивая загрузка работает только в пределах одной сессии, что не очень хорошо.
                  Если между средним звеном и БД сессию ещё можно удерживать открытой, то клиентские сессии имеют свойство истекать.
                  В итоге, получаем исключения ленивой инициализации.
                  Чтобы обойти данный недочёт, пришлось в среднем звене реализовать собственный кэш.

                  Конечно, возможно, что у нас и архитектура страдает, но я также слышал, что JPA, вроде как, лишён проблем ленивой инициализации.

                  Я так понимаю, там свой внутренний кэш?

                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                  Самое читаемое