2

我想知道处理实体 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 实体的经验感兴趣。

谢谢。

切利尼奥

http://www.celinio.net/techblog

4

3 回答 3

2

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

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

于 2011-05-01T23:03:50.240 回答
1

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

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

  2. 现在转到 EJB 模块中的实体包(我将其视为“com.ejbproject.entities”)

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

  4. 文件内容应该是

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

  5. 现在在您的 GWT 项目的 <modulename>.gwt.xml 文件中包含以下片段。

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

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

于 2011-06-13T15:56:45.117 回答
1

要检查的一种解决方案是ModelMapper

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

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

http://modelmapper.org

于 2011-06-24T05:26:43.660 回答