Playframework 将Ebean查询的结果转换为JSON不会';行不通
现在我有Playframework 将Ebean查询的结果转换为JSON不会';行不通,playframework,playframework-2.0,ebean,Playframework,Playframework 2.0,Ebean,现在我有 @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(L
@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);
...
}
基本上,关系将两个参数(或一个参数和另一个关系)链接在一起。这是两个类之间的单向关系。然而我得到了
[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
添加到引用参数
的字段中,通过完全省略这些字段来解决问题,这不是我想要的。添加@JsonManagedReference
可以保持问题不变,因为我看不到任何地方可以添加@JsonBackReference
——这是单向关系,该死
基本上,我想要的只是一个包含某个参数的JSON关系数组。表示关系的JSON对象应该只包含id——类似于{id:1,from:4,toArgument:3,type:1}
的东西正是我想要的
EDIT我应该补充一点,以前在参数
模型中运行良好的视图现在在请求为JSON时遇到相同的错误——尽管只使用参数!在我根本不改变论点的情况下,为什么完全不同的类中的某些东西会影响论点呢?最后用答案和答案解决了这个问题。我必须补充一点
@OneToMany(fetch = FetchType.LAZY, mappedBy = "from") @JsonBackReference
public List<Relation> fromThis;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "toArgument") @JsonBackReference
public List<Relation> toThis;
@OneToMany(fetch=FetchType.LAZY,mappedBy=“from”)@JsonBackReference
此列表中的公共列表;
@OneToMany(fetch=FetchType.LAZY,mappedBy=“toArgument”)@JsonBackReference
公开名单;
到参数
我不完全理解为什么,现在我将整个参数对象嵌入到JSON中——而不是我想要的ID。哦,好吧,我猜。最后用答案解决了它。我必须补充一点
@OneToMany(fetch = FetchType.LAZY, mappedBy = "from") @JsonBackReference
public List<Relation> fromThis;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "toArgument") @JsonBackReference
public List<Relation> toThis;
@OneToMany(fetch=FetchType.LAZY,mappedBy=“from”)@JsonBackReference
此列表中的公共列表;
@OneToMany(fetch=FetchType.LAZY,mappedBy=“toArgument”)@JsonBackReference
公开名单;
到参数
我不完全理解为什么,现在我将整个参数对象嵌入到JSON中——而不是我想要的ID。哦,好吧,我想