1

我有两个实体 City 和 Type 以及这两者之间的多对多关系。我需要的是:

  1. 包含类型的 City 的 json
  2. 包含城市的类型的 json。

我正在使用 JsonIdentityInfo 来阻止映射的无限递归,但我从 JSON 中得到的并没有真正帮助我。这是我目前从城市 JSON 得到的

0:  {
     @idType: 1
     id: 1
     name: "destination"
     cities: [2]
           - 0:  {
                  @idCity: 2
                  id: 3
                  name: "Zalau"
                  description: "City...."
                  types: [2] <---- I don't need this because I'm already in types JSON
                       - 0:  {
                              @idType: 3
                              id: 2
                              name: "other type"
                              cities: [1]
                                  - 0:  2

                          }
                        - 1:  1 <----- end of don't need
              }

            - 1:  {
                   @idCity: 4
                   id: 0
                   name: "Cluj"
                   description: "City2..."
                   types: [1] <---- don't need
                        - 0:  1

               }

}
1:  3 <----- I want to be the Type with id 3 although it was already generated from a city

但我需要的是这样的:

0:  {
     @idType: 1
     id: 1
     name: "destination"
     cities: [2]
           - 0:  {
                  @idCity: 2
                  id: 3
                  name: "Zalau"
                  description: "City...."
              }

            - 1:  {
                   @idCity: 4
                   id: 0
                   name: "Cluj"
                   description: "City2..."
               }

}
1:  {
     @idType: 3
     id: 2
     name: "other type"
     cities: [1]
        - 0:  {
               @idCity: 2
                id: 3
                name: "Zalau"
                description: "City...."
           }
}

城市 JSON 也是如此。我需要它是双向的。

这是我的实体的代码:

城市:

@Entity
@Table(name = "City")
@XmlRootElement
@JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class, property = "@idCity")

public class City {

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

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

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

   @ManyToMany(fetch = FetchType.EAGER)
   @JoinTable(name = "CityType", joinColumns = { @JoinColumn(name = "idCity") }, inverseJoinColumns = {
        @JoinColumn(name = "idType") })
   private Set<Type> types = new HashSet<Type>();

.... getters and setters
}

类型:

@Entity
@Table(name = "Type")
@XmlRootElement
@JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class, property = "@idType")
public class Type {

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

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

    @ManyToMany(fetch = FetchType.EAGER, mappedBy = "types")
    private Set<City> cities = new HashSet<City>();

    .... getters and setters
}
4

1 回答 1

1

换行

@JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class, property = "@idType")
to
@JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class, property = "id")

在这两门课上。

于 2015-11-09T16:40:49.550 回答