繁体   English   中英

JPA实体的JAXB Factory

[英]JAXB Factory for JPA entities

在我以前的大多数项目中,我都有两个域模型,一个带有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和支持不同语言的实体所需的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。 我知道有很多我从未听说过的可用框架或库,所以这里是我的问题:

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

基本上有两种选择:

  • 同一类上的JPA和JAXB批注(请参见Hyperjaxb3DataNucleus
  • 或者,您保持分离并编写代码以将一个映射到另一个

我个人认为跨模型映射代码没有太多附加值。 工厂的用法似乎也不太创新,这只是编程技术的问题,您可以使用编程技术将它们相互映射。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM