1

これが私の問題です:

JAX-RSアノテーションが付けられた2つのエンティティがあるとします。

@XmlRootElement
@Entity
public Person {
  private String firstname;
  private String lastname;

  private Address address;
}

@XmlType
@Entity
public Address {
  private String street;
  private String city;
}

これは次のようにレンダリングされます。

<person>
  <firstname></firstname>
  <lastname></lastname>
  <address>
    <street></street>
   <city></city>
  </address>
</person>

したがって、私の質問は次のとおりです。

返されるxmlが次のようになるようにこれらのエンティティに注釈を付けることは可能ですか?

<person>
  <firstname></firstname>
  <lastname></lastname>
  <street></street>
  <city></city>
</person>

つまり、AddressエンティティのプロパティはPersonプロパティとして扱われます(囲みタグなし)?

4

2 に答える 2

2

EclipseLink JAXB (MOXy)を使用してこれを行うことができます。MOXy には @XmlPath という注釈が含まれており、これは XPath ベースのマッピングを行うために使用されます。セルフ XPath (".") を使用すると、目的の効果が得られます。

@Entity 
@XmlAccessorType(XmlAccessType.PROPERTY) 
@XmlRootElement 
public Person { 
   private String firstname; 
   private String lastname; 
   private Address address; 

   // getter and setter for firstname/lastname 

   @XmlPath(".")
   public Address getAddress() { return address; } 

   public String getStreet() { return getAddress().getStreet(); } 

   // more getters and setters 
} 

EclipseLink JAXB拡張機能の使用例については、次を参照してください:

MOXy を JAXB 実装として使用するには、次の内容のモデル クラスに jaxb.properties ファイルを追加する必要があります。

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory

ところで、MOXy には、JPA エンティティを処理するためのいくつかの拡張機能もあります。

JAX-RS を使用して JPA ベースの RESTful サービスを作成する方法について、一連の例をブログに投稿しました。

于 2010-07-12T20:13:21.723 に答える
0

なぜあなたが望むのか完全にはわかりませんが、これはうまくいくかもしれません(テストされていません)

@XmlRootElement
@Entity
@XmlAccessorType(XmlAccessType.PROPERTY)
public Person {
   private String firstname;
   private String lastname;

   private Address address;

   // getter and setter for firstname/lastname

   @XmlTransient
   public Address getAddress() { return address; }

   public String getStreet() { return getAddress().getStreet(); }

   // more getters and setters
}

@XmlType
@Entity
public Address {
  private String street;
  private String city;

  // getters and setters
}

ただし、個人的にはこの時点でDTOパターンを使用します。ORMアノテーションとシリアル化アノテーションを混在させることはめったに良いことではありません。

于 2010-07-12T10:36:40.677 に答える