私はこのWebサービスプロジェクトでSpring(xml +注釈)、Hibernate(注釈)を使用しています。関係図、モデル、期待される実際の出力は、以下に示すデータベース、ジャクソンの双方向関係(一対多)が動作しない
Customer.java
@Entity
@Table(name="customer")
public class Customer implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="customer_id", unique=true, nullable =false)
long customerId;
@Column(name="name")
String name;
@Column(name="secondary_name")
String secondaryName;
@Column(name="date")
Date date;
@Column(name="address")
String address;
@Column(name="post")
String post;
@Column(name="pin")
String pin;
@Column(name="phone")
String phone;
@OneToMany(fetch=FetchType.LAZY, mappedBy="customer", cascade=CascadeType.ALL)
@JsonManagedReference
Set<Loan> loans = new HashSet<Loan>();
//constructors, getters and setters
}
Loan.java
public class Loan implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="loan_id", nullable=false, unique=true)
long loanId;
@ManyToOne(fetch = FetchType.EAGER, cascade=CascadeType.ALL)
@JoinColumn(name="customer_id", nullable = false)
@JsonBackReference
Customer customer;
@Column(name="date", nullable=false)
Date date;
@Column(name="amount", nullable=false)
double amount;
@OneToMany(fetch=FetchType.LAZY, mappedBy="loan", cascade=CascadeType.ALL)
@JsonManagedReference
List<Item> items = new ArrayList<Item>();
//constructors, getters, setters
}
Item.java
public class Item implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="item_id", nullable=false, unique=true)
long itemId;
@ManyToOne(fetch=FetchType.LAZY, cascade=CascadeType.ALL)
@JoinColumn(name="loan_id", nullable = false)
@JsonBackReference
Loan loan;
@Column(name="name", nullable=false)
String name;
@Column(name="weight", nullable=false)
double weight;
//constructors, setters, getters
}
実際の出力:ここでは、顧客の詳細が示されていない
{
"loanId":4,
"date":1484937000000,
"amount":10000.0,
"items":[
{
"itemId":3,
"name":"Item1",
"weight":10.0
},
{
"itemId":4,
"name":"Item2",
"weight":20.0
}
]
}
予想される出力:ローンを探していたときにも、顧客の詳細情報を表示する必要が
{
"loanId":4,
"customer":{
"customerId":2,
"name":"Prem",
"address":"Street,State"
},
"date":1484937000000,
"amount":10000.0,
"items":[
{
"itemId":3,
"name":"Item1",
"weight":10.0
},
{
"itemId":4,
"name":"Item2",
"weight":20.0
}
]
}
私はできから顧客の詳細情報を取得することができJackson Jsonを使用してロードすることができません。 @JsonManagedReferenceを削除すると、循環ループが発生します。 @JsonBackReferenceを削除した場合、出力には何の効果もありません。 完全なコードはhttps://github.com/liwevire/TM_Service ありがとうございます。
私は両方を持つことはできませんか?私は顧客が持っているローンを知りたいときがあります。時には、誰が融資の対象にタグ付けされているのが欲しいのですか。 とにかく、私はアプリケーション間のトラフィック増加の犠牲を払って状況を管理することができます。 – liwevire
'@ JsonIdentityInfo'アノテーションを使用できます。すべての '@ JsonBackReference'と' @ JsonManagedReference'をエンティティから削除してください。そして、 'Customer'、' Loan'、 'Item'に' @JsonIdentityInfo'を追加します。 –
以下の出力 '{" loanId ":2、" customer ":{" customerId ":1、" name ":" Premkumar "、" secondaryName ":" T "、" date ":1484663297000、" address " 「2」「loanId」:3、「customer」:1、「date」、「Sethu Road」、「post」、「PVI」、「pin」:「614804」、「phone」:「」、「loans」: ":1484591400000、" amount ":20.0、" items ":[{" itemId ":2、" loan ":3、" name ":" L2 "、" weight ":10]}}、{"loanId":4、 "customer":1、 "date":1484937000000、 "amount":10000.0、 "items":[{"itemId":3、 "loan":4、 "name ";" Item1 "、" weight ":10.0}、{" itemId ":4、" loan ":4、" name ":" Item2 "、" weight ":20.0}]}}}、" date ":1484591400000 "amount":40.0、 "items":[{"itemId":1、 "loan":2、 "name": "PT1"、 "weight":1.0}]} ' – liwevire