2016-04-26 11 views
0

私は春のブートとjpa/hibernateの新機能です。用語の正確な使用法を忘れないでください。JPAの双方向エンティティを春に開発する方法

私は、本と住所の2つのエンティティを持っています。ある本が「住所」に格納されている特定の都市に発行されている場合、「住所」は複数の書籍を発行することができます。本のため DBスキーマは次のとおりです。本のあるAddressId、addressCountry、addressCity エンティティ:ID、名前、著者、価格、アドレスの スキーマをあるAddressId

@Entity 
@Table(name = "test_book") 
public class Book implements Serializable { 
private static final long serialVersionUID = 8025948150436422040L; 
@Id 
long id; 

@Column(name = "name") 
String name; 

@Column(name = "author") 
String author; 

@Column(name = "price") 
long price; 

@ManyToOne 
@JoinColumn(name = "addressid") 
private Address address; 
...//getter and setter 

実体アドレス

@Entity 
@Table(name = "test_address") 
public class Address implements Serializable{ 
private static final long serialVersionUID = -3541059157210384355L; 
@Id 
@Column(name= "addressid") 
private long addressId; 

@Column(name="addresscountry") 
private String addressCountry; 

@Column(name="addresscity") 
private String addressCity; 

@OneToMany(mappedBy = "address") 
private Collection<Book> books; 
...//getter setter 

しかし、私はRESTfulなサービスを呼び出すときに、私は無限ループを取得...

[{ "ID":11、 "名": "Javaのブック"、 "著者": "ジェームズゴスリング"、 "価格": 100、 "address":{"addressId":1、 "addressCountry": "China"、 "addressCity ";"上海 "、"書籍 ":[{" id ":11、"名前 ":" Java Book "、"著者 ":" Jame Gosling "、"価格 ":100、"住所 ":...

検索しました。そして、私の要求は: 私は本を検索するとき、私は情報を得ることができます:ID、名前、著者、価格、住所.. また、私は市が公開したすべての書籍を取得するためのアドレスを照会することができます。 ブックエンティティのアドレスに@JsonManagedReferenceと@JsonBackReferenceを追加すると、書籍を検索できますが、アドレス情報を取得することはできません。

問題の解決方法を教えてください。どうもありがとうございました。

+0

のために>エンティティ 'JsonView'もしあなたドンの概念に見てください -

:あなたはJsonIgnore

を提供するために、そしてそう、あなたのコードは次のようになります必要、これは停止するにはその本を住所に戻す必要があります。それ以外の場合は、オブジェクトアノテーションを微調整して参照先のエンティティのIDまたはURIを返すことができます。 HATEOASを使用します。 –

+0

申し訳ありませんが、私はそれを明確にしませんでした。私は住所付きの本を返したい。住所を質問するときは、そこから出版された住所とすべての書籍をリストアップする。 – Sai

答えて

0

書籍のゲッターの@JsonIgnoreは無視できます。これにより、アドレスCollection<Book> booksがシリアル化から除外されます。

リンク:JacksonAnnotations - Faster XML Wiki

例:

@JsonIgnore 
public Collection<Book> getBooks() { 
... 
} 
0

@JsonIgnore

ジャクソン注釈@JsonIgnoreが 特定のプロパティ(フィールド)を無視するようにジャクソンを伝えるために使用されているのJavaオブジェクト。 JSONをJavaオブジェクトに読み込むときと、Java オブジェクトをJSONに書き込むときの両方で、このプロパティは無視されます。

あなたのケースでは、これは双方向の関係があるので起こります。したがって、ループに入ります。アドレス

@Entity 
@Table(name = "test_address") 
public class Address implements Serializable{ 
private static final long serialVersionUID = -3541059157210384355L; 
@Id 
@Column(name= "addressid") 
private long addressId; 

@Column(name="addresscountry") 
private String addressCountry; 

@Column(name="addresscity") 
private String addressCity; 

@OneToMany(mappedBy = "address") 
@JsonIgnore 
private Collection<Book> books; 
+0

Riddhi Gohilありがとうございました。 @JsonIgnoreを使用すると、住所を検索し、アドレス情報と住所から発行された書籍を取得できますか? – Sai

関連する問題