2016-09-22 12 views
1

POSTMANでGETリクエストを送信して、すべての子エンティティ(Town)を取得すると、親エンティティ(Province)はJSON応答。Spring:ManyToOneエンティティを取得すると、参照エンティティ(OneToMany)がJSONに表示されない

これは私のコントローラです。

@RequestMapping(value ="api/v1/town",method = RequestMethod.GET) 
public ResponseEntity<List<Town>> getAllTowns() { 
    List<Town> towns = townService.getAllTowns(); 
    if(towns.isEmpty()) { 
     return new ResponseEntity<List<Town>>(HttpStatus.NO_CONTENT); 
    } 

    return new ResponseEntity<List<Town>>(towns, HttpStatus.OK); 
} 

これは私のエンティティです。

親クラス

@Entity 
@Table(name = "PROVINCE") 
public class Province { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "PROVINCE_ID") 
    private long id; 

    private String name; 

    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "province", targetEntity = Town.class) 
    @JsonManagedReference("Province-Town") 
    private List<Town> towns; 

    public long getId() { 
     return id; 
    } 

    public void setId(long id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public List<Town> getTowns() { 
     return towns; 
    } 

    public void setTowns(List<Town> towns) { 
     this.towns = towns; 
    } 
} 

託児クラス

@Entity 
@Table(name = "TOWN") 
public class Town { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "TOWN_ID") 
    private long id; 

    private String name; 

    @ManyToOne(cascade = CascadeType.MERGE) 
    @JoinColumn(name = "PROVINCE_ID") 
    @JsonBackReference("Province-Town") 
    private Province province; 

    private long kilometer; 

    public long getId() { 
     return id; 
    } 

    public void setId(long id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public Province getProvince() { 
     return province; 
    } 

    public void setProvince(Province province) { 
     this.province = province; 
    } 

    public long getKilometer() { 
     return kilometer; 
    } 

    public void setKilometer(long kilometer) { 
     this.kilometer = kilometer; 
    } 
} 

私は取得していますという回答は、私が期待してい何この

{ 
    "id" : 1, 
    "name" : "Some Town", 
    "kilometer" : 350 
} 

のようなものです

{ 
    "id" : 1, 
    "name" : "Some Town", 
    "province" : { 
      //Province data..... 
    } 
    "kilometer" : 350 
} 
です

私はこのようなことを見せてもらえましたが、私が使ったオブジェクトはSpring-data-jpaエンティティではなく、単純なPOJOです。

エンティティに問題はありますか?それとも他に何かありますか?

答えて

1

スワップ@JsonBackReferenceおよび@JsonManagedReference。基本的に:

@JsonManagedReference 
private Province province; 

@JsonBackReference 
private List<Town> towns; 
+0

これを行うと、私の親エンティティは子エンティティを表示できなくなります。私はこのhttp://stackoverflow.com/questions/22615317/serialize-bi-directional-jpa-entities-to-json-with-jacksonを参照して修正することができました。 – Aaron

関連する問題