2011-06-15 81 views
1

在我以前的大部分項目中,我有兩個領域模型,一個使用JAXB註釋,另一個使用JPA註釋。我知道他們可以合併成一個模型,並且在同一個班級都有兩個註釋,但是根據我的經驗,這種方法的權衡總是得出結論來區分它們。獨立方法的另一個優點是能夠使用XSD創建JAXB類,並輕鬆鏈接來自其他項目的XSD。JPA實體的JAXB工廠

在大多數情況下,我需要工廠類能夠靈活地創建我的實體的JAXB表示,例如,

public class UserFactory 
{ 
    public UserFactory(User queryUser, String lang) 
    { 
    this.queryUser=queryUser; 
    this.lang=lang; 
    } 

    public JaxbUser getUser(JpaUser jpaUser) 
    { 
    JaxbUser jaxbUser = new JaxbUser(); 

    if(queryUser.isSetId()){jaxbUser.setId(jpaUser.getId());} 
    if(queryUser.isSetEmail()){jaxbUser.setEmail(jpaUser.getEmail());} 

    if(queryUser.isSetRoles()) 
    { 
     RolesFactory f = new RolesFactory(queryUser.getRoles(),lang); 
     jaxbUser.setRoles(f.getRoles(jpaUser.getRoles())); 
    } 
    return jaxbUser; 
    } 
} 

我創建一個單獨的模板queryUser和支持不同語言的實體所需的lang一個UserFactory。在爲特定字段或其他工廠創建結果期間檢查模板,並創建結果對象。查詢是在XML文件中定義是這樣的:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<query lang="en"> 
    <user id="1"> 
    <roles> 
     <role code="code"/> 
    </roles> 
    </user> 
</query> 

有了這個方法,我有一個強大而靈活的工具來創建定製XML,儘管工廠類維護兩個域模型的所有缺點和。我知道有很多框架或庫可用,我從來沒有聽說過,所以在這裏我的問題:

是否有可用的東西類似於我的方法?

+0

顯然,DataNucleus允許您只擁有JPA實體並從它們生成XML(即保留到XML,使用JAXB,使用JPA註釋)......無論您是否還包含JAXB註釋。不知道這是否會對你的情況有好處,但是如果不知道它的存在,我會提及它 – DataNucleus 2011-06-15 18:55:03

回答

0

基本上有兩種選擇:

  • JPA和JAXB標註同一類(見Hyperjaxb3DataNucleus
  • 或者你keepm的分離,並編寫代碼來繪製一個到另一個

我個人在跨模型映射代碼中看不到很多附加值。工廠的使用似乎也不是太創新,它只是一個編程技術的問題,你用它來映射到另一個。