GWT 2.7.0 + JPA 2.1 + Hibernate 5. Пример доступа к базе данных из GWT с помощью JPA + Hibernate

Подключение JPA 2.1 в приложении GWT 2.7.0. Использование в качестве поставщика постоянства фреймворка Hibernate 5.

На основе статьи GWT + Hibernate 5.
Используемые технологии
  • GWT 2.7.0.
  • JPA 2.1
  • Hibernate 5.0.1
  • MySQL 5.6.25
  • Intellij Idea 15

1 Описание задачи

Подключить JPA с использованием Hibernate в качестве поставщика постоянства к приложению, написанному на GWT (Google Web Toolkit). Рассмотреть необходимые зависимости и классы для получения данных из базы данных MySQL.

2. Структура проекта

GWT Jpa structure

В приложении будет использоваться главный модуль Main и необходимые связанные файлы: Main.class, Main.css, Main.html, Main.gwt.xml.

Описание файла конфигурации JPA: persistence.xml.

Класс доступа к данным на серверной стороне: MainRpcServiceImpl.

3. Создание приложения

Внимание: код приложения на 99% повторяет приложение GWT+Hibernate. Подробнее в GWT + Hibernate 5. Пример использования Hibernate 5 с Google Web Toolkit 2.7.0. В статье подробно расписаны все необходимые классы и пошаговая настройка приложения для связи с базой данных MySql.

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

3.1. pom.xml

Относительно предыдущей статьи GWT + Hibernate здесь добавлена еще одна зависимость javaee-api 7.0, которая будет использоваться для внедрения зависимости @Inject EntityManagerFactory.

3.2 Подключение JPA

После создания пустого maven проекта и подключения зависимостей необходимо добавить поддержку JPA в наше приложение. Для этого на заголовке приложения нажимаем правой кнопкой и выбираем Add Framework Support..

add Jpa support

Выбираем GWT и JavaEE Persistence. В качестве поставщика постоянства здесь отмечен Hibernate. Это сгенерирует код в persistence.xml связанный с hibernate. Но на самом деле всё, что создала Idea 15.0 было удалено:) Так что можете ничего не выбирать в контексте этой статьи.

3.2.1 persistence.xml

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

3.3. Маппинг таблиц в java классы

Подключение к базе данных, а так же генерация сущностей описано в GWT + Hibernate 5. Не забудьте добавить ссылку на data source:

assign DataSource

Используемая таблица:

GWT Jpa DBUsers

4. Серверная часть

Как указывал выше, описание всех классов смотрите в статье GWT + Hibernate 5.

Код серверной части для доступа к базе данных с помощью JPA EntityManeger.

MainRpcServiceImpl:

Вначале создаем EntityManagerFactory managerFactory = Persistence.createEntityManagerFactory(«jpaPersistenceUnit»); где jpaPersistenceUnit — имя, указанное в persistence.xml. Затем следующей строчкой создаем EntityManager, а далее с помощью него уже получаем список записей в методе getAllUsers();

5. Запуск приложения

После запуска (код модуля и метода onModuleLoad читайте в предыдущей статье) данные из БД для первого пользователя подставятся в поля, а также будет выведено общее кол-во записей в таблице:

GWT Jpa start

Полезные ссылки

Исходные коды

GWT — JPA Persistence — исходный код и sql дамп.

Share Button
6
7136 Total Views 1 Views Today

8 thoughts on “GWT 2.7.0 + JPA 2.1 + Hibernate 5. Пример доступа к базе данных из GWT с помощью JPA + Hibernate

  1. Денис:

    Хорошие статьи, спасибо!

    А зачем подключать JPA если и просто с Hibernate все вроде как хорошо ?

    1. Nick V.:

      JPA — API, а Hibernate это реализация. Если захотите поменять реализацию JPA с Hibernate на, скажем, OpenJPA\EclipseLink, то проблем не возникнет. А поменять привязанный к самостоятельной реализации на другую может быть сложно.

      1. Денис:

        Т.е. только по этой причине получается, более профитов никаких нет?

        И у меня еще вопрос, тут пример с одной страницей и выводом инфы на ней…
        Почему бы не сделать пример в котором есть страница логина, и при успешной авторизации переходим на вторую страницу где мы например приветствуем пользователя.
        Из одной страницы как то не вырисовывается полной картины как оно в GWT все устроено удобно или не очень…

        1. Nick V.:

          Какую использовать технологию обычно выбирают на стадии проектирования и взвешивают за и против (у каждой реализации есть сильные и слабые стороны, которые могут иметь решающее значение при выборе). Если нет уверенности в конкретной реализации, то лучше выбрать «оригинальную» (из JEE, JSE).
          По поводу примера из этой статьи — без навигации пример, конечно, может быть непонятным и поэтому даже начал писать маленькое учебное приложение с функционалом интернет магазина. Т.е. логин, корзина, несколько товаров и возможность заказа. Но оно подвисло на неопределенный срок. В дальнейшем всё же доделаю, но это будет точно не скоро.

  2. Денис:

    А по логированию… в GWT и серверная и клиентская часть доступны, а как создавать лог и на сервере и на клиенте, не подскажешь?

    1. Nick V.:

      Да в целом как обычно — например через Log4j. Но лучше поискать пример в интернете. Ссылочку с ходу не подскажу.

  3. Максим:

    Понимаю, что прошло времени прилично, но терзает меня один вопрос.

    Вот Чтение из базы вроде бы реализовано. А что с записью?

    Как из Main-а мне корректно передать данные в это:
     @Override
        public Users saveUser(Users user) {
            em.merge(user);
            return null;
        }

  4. Максим:

    т.е. в Main есть

Добавить комментарий