GWT +实体+ JPA + DTO + Dozer

时间:2011-04-30 10:39:15

标签: gwt jpa entity dto dozer

我想知道处理实体bean(JPA 2)到DTO的映射的最佳方法是什么。 由于您无法“直接”使用GWT实体bean,因此您需要处理DTO。

我有几个具有各种关系的实体(OneToOne,OneToMany,ManyToMany和连接表等)。 最初,我开始在MyEntityTransform.java类的帮助下手动将所有实体转换为DTO,方法如下:

  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类中的方法时。

你有什么建议?我对每个人使用GWT处理JPA实体的经验感兴趣。

感谢。

Celinio

http://www.celinio.net/techblog

3 个答案:

答案 0 :(得分:2)

首先,我总是喜欢Dozer。当DTO结构与您的实体相同时,只需调用map函数即可使用零配置的Dozer。当您的DTO与实体不同时,配置开销很小。只需查看非常好的文档即可。

当性能成为问题时,我更喜欢代码生成器方法,但我永远不会自己编写映射代码,因为它可能非常容易出错。

答案 1 :(得分:1)

如果您只想在GWT模块中的EJB或JPA模块中包含实体,请按照以下步骤操作。我发现它是我自己的,它对我有用。

  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项目的&lt; modulename&gt; .gwt.xml文件中包含以下片段。

      

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

  6. 现在您可以在GWT客户端和gwtCompile中包含实体而不会出现任何问题

答案 2 :(得分:1)

结帐的一个解决方案是ModelMapper

它与Dozer和其他人的不同之处在于它通过智能地映射对象模型来最小化所需的配置量。在需要配置的地方,ModelMapper提供了一个重构安全API,它使用实际代码来映射属性和值,而不是使用字符串引用或XML。

查看ModelMapper网站了解更多信息:

http://modelmapper.org