GWT + entities + JPA + DTO + Dozer

dozerdtoentitygwtjpa

I am wondering what is the best way to handle mapping of entity beans (JPA 2) to DTOs.
Since you cannot use entity beans "directly" with GWT, you need to handle DTOs instead.

I have several entities with various relationships (OneToOne, OneToMany, ManyToMany with a join table etc).
Initially i started converting all entities to DTOs by hand with the help of a class MyEntityTransform.java with methods like :

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

Other methods are : persistent2BeanCollection(…), persistent2BeanMap(…), bean2Persistent(…), bean2PersistentCollection(…)

That becomes a fastidious task when handling collections, especially when the same entity has references to several other entities;

I have been thinking about using the DOZER framework to handle the mapping between entities and DTOs.
It is mentionned here : http://code.google.com/intl/fr/webtoolkit/articles/using_gwt_with_hibernate.html

However i am not sure how well it handles the various JPA mappings (manytomany for instance) and how much work it is to configure it in the dozer-bean-mappings.xml file.
Also i guess this framework is intensively using reflection to perform mapping operations. Such approach is much slower than mapping performed "by hands", e.g. when i use the methods in my MyEntityTransform.java class.

What do you suggest ? i'm interested in everybody's experience handling JPA entities with GWT.

Thanks.

Celinio

http://www.celinio.net/techblog

Best Answer

In first instance I would always prefer Dozer. When the DTO structure is the same as your entities, you can use Dozer with zero configuration by simply calling the map function. When your DTOs differ from your entities the configuration overhead is minimal. Simply look in the really good documentation.

When performance becomes an issue, I would prefer a code generator approach, but I would never write the mapping code by myself cause it can be very error prone.

Related Topic