2017-06-14 58 views
0

如果我有一類單@Id場我可以使用@JsonIdentityInfo這樣的:如何在複合PK中使用@JsonIdentityInfo?

@Entity 
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id") 
class Example { 

    @Id 
    int id; 
    // getter setter 
} 

但是,如果我有一個複合PK類:

@Entity 
@IdClass(value = PointID.class) 
public class Point { 

    @Id 
    private int x; 
    @Id 
    private int y; 
} 

@SuppressWarnings("serial") 
class PointID implements Serializable { 
    int x, y; 
} 

如何使用註釋?在上述情況下的使用將是這樣的

Point p = new Point(1,1); 
object1.setPoint(p); 
object2.setPoint(p); 
bigObject.add(object1, object2); 

,當我序列bigObject我不想duplciate點的數據,但像它與第一例子確實使用其ID。

回答

0

看來,@JsonIdentityInfo不按我的嘗試和在線研究與複合PK合作。

0

我搜索了傑克遜文檔和源代碼,並找不到支持由多個屬性組成的object-id。

所以,我對你的建議是在一個getter方法來創建這樣一個複合鍵:

@Entity 
@IdClass(value = PointID.class) 
public class Point { 

    @Id 
    private int x; 
    @Id 
    private int y; 

    @JsonIdentityInfo(
     generator = ObjectIdGenerators.PropertyGenerator.class, 
     property = "pk") 
    public String getPk() { 
     return x + "->" + y; 
    } 

    @JsonIgnore 
    public int getX() { 
     return x + "->" + y; 
    } 

    // @JsonIgnore on all individual properties that make pk 
} 
+0

我剛剛測試過這個和JSON表示是重複的。我在'Point'類中添加了'int a,b,c,d'來進行測試,並得到了這個表示:{「x」:1,「y」:2,「a」:0,「b」 「c」:0,「d」:0,「pk」:「1-> 2」}'在任何地方使用引用,而不是僅使用一次,而使用其他所有地方。 – Mark

+0

將'@ JsonIgnore'添加到各個屬性中。請參閱已編輯的答案 –

+0

結果仍然相同。 – Mark