저는이 웹 서비스 프로젝트에서 Spring (xml + annotations), Hibernate (annotation)을 사용하고 있습니다. 데이터베이스의 관계도를, 모델,Jackson 양방향 관계 (일대 다) 작동하지 않습니다.
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
}
]
}
I 수로부터 고객 정보를 가져올 수 잭슨 Json을 사용하여 데이터베이스를로드하지 못했습니다. @JsonManagedReference를 제거하면 순환 루프가 발생합니다. @JsonBackReference를 제거하면 출력에 효과가 없습니다. 전체 코드 : https://github.com/liwevire/TM_Service 미리 감사드립니다.
둘 다 가질 수 없습니까? Coz, 고객이 가지고있는 대출을 알고 싶습니다. 때로는 대출 대상자를 원합니다. 어쨌든 응용 프로그램 간의 트래픽 증가로 인해 상황을 관리 할 수 있습니다. – liwevire
'@ JsonIdentityInfo' 주석을 사용할 수 있습니다. 모든'@ JsonBackReference'와'@ JsonManagedReference'를 엔티티에서 제거하십시오. 그리고'Customer','Loan','Item'에'@JsonIdentityInfo'를 추가하십시오. –
아래 출력 '{ "loanId": 2, "customer": { "customerId": 1, "name": "Premkumar", "secondaryName": "T", "date": 1484663297000, "address" Pod ":"614804 ","전화 ":"","loans ": [2, {"loanId ": 3,"customer ": 1,"date " ": 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