2011-04-30 49 views
2

我想知道处理实体bean(JPA 2)到DTO的映射的最佳方式是什么。 由于您不能直接使用实体bean和GWT,所以您需要改为处理DTO。GWT +实体+ JPA + 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之间的映射。 在此mentionned:http://code.google.com/intl/fr/webtoolkit/articles/using_gwt_with_hibernate.html

但是我不知道它如何妥善处理各种JPA映射(多对多例如),有多少工作是配置它在推土机豆-mappings.xml文件。 另外我猜这个框架是密集使用反射来执行映射操作。这种方法比“手动”执行的映射慢得多,例如,当我在MyEntityTransform.java类中使用方法时。

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

谢谢。

Celinio

http://www.celinio.net/techblog

回答

2

在第一种情况下我总是喜欢推土机。当DTO结构与实体相同时,只需调用map函数即可使用零配置的Dozer。当您的DTO与您的实体不同时,配置开销很小。只需查看真正优秀的文档。

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

+0

感谢您的反馈。不确定我会做什么,因为性能可能会受到影响,因为Dozer密集使用反射来将实体映射到DTO。 – 2011-05-02 04:28:05

+0

看看Dozer FAQ:http://dozer.sourceforge.net/documentation/faq.html#dozer-perf。当性能真的成为一个问题时,您担心我认为在开始项目之前您必须对不同的框架进行基准测试。 – malte 2011-05-04 12:10:58

1

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

  1. 包括在GWT模块的构建路径EJB模块(您可能已经这样做了)

  2. 现在跳转到你的实体包在EJB模块(我将会把它作为“com.ejbproject.entities” )

  3. 创建一个名为Entities.gwt的文件。XML(<ProjectSourcePath>/com/ejbproject/entities/Entities.gwt.xml

  4. 文件内容应该是

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

  5. 现在包括在您的GWT项目的<MODULENAME> .gwt下面的片段。 xml文件。

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

  6. 现在您可以在您的GWT客户端和gwtCompile实体没有任何问题

+1

虽然这有助于GWT理解类,但它不能解决OP的问题:JPA实体不能被GWT序列化。见http://stackoverflow.com/questions/6405481/entity-with-relationships-through-gwt-rpc-problem – Hank 2011-11-04 08:46:45

1

一个解决方案,以检查出是ModelMapper

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

退房的ModelMapper网站获取更多信息:

http://modelmapper.org