GWT + юридические лица + JPA + DTO + Dozer - PullRequest
2 голосов
/ 30 апреля 2011

Мне интересно, как лучше всего обрабатывать сопоставление объектов управления данными (JPA 2) в DTO.Поскольку вы не можете использовать бины сущностей "напрямую" с GWT, вам нужно вместо этого обрабатывать DTO.

У меня есть несколько сущностей с различными отношениями (OneToOne, OneToMany, ManyToMany с таблицей соединений и т. Д.).Первоначально я начал преобразовывать все сущности в DTO вручную с помощью класса MyEntityTransform.java с методами, такими как:

  static final public CarBean persistant2Bean(CarPersist) {
            return new CarBean(cartPersist.getId(), carPersist.getName(),
                    carPersist.getDescription());
        }

Другие методы: persistent2BeanCollection (...), persistent2BeanMap (...),bean2Persistent (...), bean2PersistentCollection (...)

Это становится сложной задачей при обработке коллекций, особенно когда одна и та же сущность имеет ссылки на несколько других сущностей;

Я думалоб использовании платформы DOZER для обработки отображения между сущностями и DTO.Здесь упоминается: http://code.google.com/intl/fr/webtoolkit/articles/using_gwt_with_hibernate.html

Однако я не уверен, насколько хорошо он обрабатывает различные сопоставления JPA (например, многие) и сколько нужно работы для его настройки в dozer-bean-mappings.xml.файл.Также я предполагаю, что эта среда интенсивно использует отражение для выполнения операций отображения.Такой подход намного медленнее, чем отображение, выполняемое «руками», например, когда я использую методы в своем классе MyEntityTransform.java.

Что вы предлагаете?Мне интересен опыт работы с JPA с GWT.

Спасибо.

Celinio

http://www.celinio.net/techblog

Ответы [ 3 ]

2 голосов
/ 02 мая 2011

Во-первых, я бы всегда предпочел Dozer. Когда структура DTO такая же, как у ваших сущностей, вы можете использовать Dozer с нулевой конфигурацией, просто вызвав функцию map. Когда ваши DTO отличаются от ваших сущностей, накладные расходы конфигурации минимальны. Просто посмотрите действительно хорошую документацию.

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

1 голос
/ 24 июня 2011

Одно решение, чтобы проверить это ModelMapper .

Он отличается от Dozer и других тем, что сводит к минимуму объем конфигурации, необходимый для интеллектуального сопоставления объектных моделей. Там, где требуется настройка, ModelMapper предлагает безопасный API рефакторинга, который использует реальный код для сопоставления свойств и значений, а не с использованием строковых ссылок или XML.

Посетите сайт ModelMapper для получения дополнительной информации:

http://modelmapper.org

1 голос
/ 13 июня 2011

Если вы хотите просто включить сущности в свой модуль EJB или JPA в свой модуль GWT, выполните следующие действия. Я нашел это сам, и у меня это сработало.

  1. Включите ваш модуль EJB в путь сборки модуля GWT (вы, возможно, уже сделали это)

  2. Теперь перейдите к вашему пакету сущностей в модуле EJB (я возьму его как "com.ejbproject.entities")

  3. Создайте файл с именем Entities.gwt.xml (<ProjectSourcePath>/com/ejbproject/entities/Entities.gwt.xml)

  4. Содержание файла должно быть

    <module>
    <source>com.ejbproject.entities</source>
    </module>

  5. Теперь включите следующий фрагмент в файл .gwt.xml вашего проекта GWT.

    <inherits name="com.ejbproject.entities.Entities"/>

  6. Теперь вы можете без проблем включать сущности на стороне клиента GWT и gwtCompile

...