2015-11-09 71 views
0

我有两个实体City和Type以及这两者之间的多对多关系。我需要的是:JsonIdentityInfo用于休眠映射

  1. 为市JSON其中包含了类型
  2. A型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 
} 

回答

0

Chnage行

@JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class, property = "@idType") 
to 
@JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class, property = "id") 
两个类别上的

+0

如果我这样做,唯一的区别是我有“id:3”但不是对象的json。有没有办法解析json,即使它只有对象的id的引用? –

+0

我不明白你想要什么,请你详细说明。 –