2011-06-15 55 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的分离,并编写代码来绘制一个到另一个

我个人在跨模型映射代码中看不到很多附加值。工厂的使用似乎也不是太创新,它只是一个编程技术的问题,你用它来映射到另一个。