java - JPA 实体的 JAXB 工厂

标签 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;
  }
}

我创建了一个 UserFactory,其中包含单独的模板 queryUser 和支持不同语言的实体所需的 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,尽管维护两个域模型和工厂类有很多缺点。我知道有许多我从未听说过的框架或库可用,所以这里是我的问题:

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

最佳答案

基本上有两种选择:

  • 同一类上的 JPA 和 JAXB 注释(请参阅 Hyperjaxb3DataNucleus)
  • 或者您将它们分开并编写代码将一个映射到另一个

我个人认为跨模型映射代码没有太多附加值(value)。工厂的使用似乎也不是太创新,这只是一个用于将一个映射到另一个的编程技术的问题。

关于java - JPA 实体的 JAXB 工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6362755/

相关文章:

java - Eclipse RCP 案例研究

java - Sendkeys 不一致地丢弃字母

java - 在 UIMA 中获取 JSON 格式的输出

java - Spring Data JPA 是否忽略 @Fetch 注释?

java - 如何在客户端应用程序中访问Web服务?

java - 如何使用 Java 使用现有的 dtd 生成数据示例的 xml 文件

java - 默认情况下防止 JAXB 解码器转义特殊字符

java - 在 hibernate 中使用 jpa 时获取 hibernate.properties not found 和 java.lang.NoClassDefFoundError

java - Hibernate 一对多映射正在尝试将映射列更新为空

java - JPA(使用 Hibernate)@ManyToMany @JoinTable 关系级联