JAXB Factory for JPA实体

时间:2011-06-15 18:50:44

标签: java jpa jaxb factory

在我之前的大部分项目中,我有两个域模型,一个使用JAXB注释,另一个使用JPA注释。我知道他们可以在同一个班级中将两个注释组合成一个模型,但根据我的经验,这种方法的权衡总是得出结论将它们分开。单独方法的另一个优点是能够使用XSD创建JAXB类,并轻松链接到其他项目的XSD。

在大多数情况下,我需要工厂类能够灵活地创建我的实体的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创建了一个UserFactory,为支持不同语言的实体创建了所需的lang。在为特定字段或其他工厂创建结果期间检查模板,并创建生成的对象。查询在XML文件中定义,如下所示:

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

使用这种方法,我有一个强大而灵活的工具来创建自定义XML,尽管维护两个域模型和工厂类的所有缺点。我知道有很多框架或库可供我从未听说过,所以我的问题在这里:

是否有类似于我的方法的可用内容?

1 个答案:

答案 0 :(得分:0)

基本上有两种选择:

  • 相同类的JPA和JAXB注释(请参阅Hyperjaxb3DataNucleus
  • 或者你保持分离并编写代码以将其映射到另一个

我个人认为跨模型映射代码没有太大的附加价值。工厂的使用似乎也不太具有创新性,它只是一个编程技术的问题,你用它来映射到另一个。