2014-04-04 21 views
0

現在我有轉換Ebean查詢JSON的結果不起作用

@Entity 
public class Argument extends Model 
{ 
    @Id 
    public Long id; 

    @Required @NotEmpty @Size(max = 140) 
    public String summary; 

    @SuppressWarnings("unchecked") 
    public static Finder<Long, Argument> find = new Finder(Long.class, Argument.class); 
    ... 
} 

@Entity 
public class Relation extends Model 
{ 
    @Id 
    public Long id; 

    @Required @ManyToOne @NotNull @JsonManagedReference 
    public Argument from; 
    @ManyToOne @JsonManagedReference 
    public Argument toArgument; 
    @ManyToOne @JsonManagedReference 
    public Relation toRelation; 
    @Required @NotNull 
    public Integer type; 
    ... 
} 

基本上,Relation連接兩個參數(或參數和其他關係)在一起。這是兩個類之間的單向關係。然而,我得到

[RuntimeException: java.lang.IllegalArgumentException: Infinite recursion 
(StackOverflowError) (through reference chain: models.Argument["relations"]-> 
com.avaje.ebean.common.BeanList[0]->models.Relation["from"]-> 
models.Argument["relations"]-> ... ->models.Argument["relations"]) 
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:611) ~[jackson-databind.jar:2.2.2] 
    at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:142) ~[jackson-databind.jar:2.2.2] 
    ... 

當我嘗試做

find.where().or(Expr.eq("from", argument), Expr.eq("toArgument", argument)).findList(); 

,過一會兒給該結果Json.toJson

@JsonBackReference添加到引用Argument的字段通過完全忽略這些字段來解決問題,這不是我想要的。加入@JsonManagedReference可以使問題保持​​不變,因爲我沒有看到任何地方添加@JsonBackReference - 這是一個單向關係,可以幫助您!

基本上,我想要的只是涉及某個參數的JSON數組關係。代表關係的JSON對象應該只包含ID - 像{id: 1, from: 4, toArgument: 3, type: 1}就是我想要的東西。

編輯我要補充的是先前與Argument模式運行良好的觀點現在遇到了同樣的錯誤時,該請求是JSON - 儘管工作與參數!爲什麼當一個完全不同的類中的某些東西影響了參數時,我根本就沒有改變參數?

回答

5

最後用thisthis解答了答案。我不得不添加

@OneToMany(fetch = FetchType.LAZY, mappedBy = "from") @JsonBackReference 
public List<Relation> fromThis; 
@OneToMany(fetch = FetchType.LAZY, mappedBy = "toArgument") @JsonBackReference 
public List<Relation> toThis; 

Argument

不完全明白爲什麼,現在我得到嵌入JSON中的整個參數對象 - 而不是隻有ID,這正是我想要的。哦,我猜。