2011-04-30 52 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