wro*_*ame 0 playframework ebean playframework-2.0
现在我有
@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);
...
}
Run Code Online (Sandbox Code Playgroud)
和
@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;
...
}
Run Code Online (Sandbox Code Playgroud)
基本上,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]
...
Run Code Online (Sandbox Code Playgroud)
当我尝试做的时候
find.where().or(Expr.eq("from", argument), Expr.eq("toArgument", argument)).findList();
Run Code Online (Sandbox Code Playgroud)
然后打电话Json.toJson给那个结果.
添加@JsonBackReference到引用的字段Argument通过完全省略这些字段来解决问题,这不是我想要的.添加@JsonManagedReference可以保持问题不变,因为我没有看到任何地方添加@JsonBackReference- 这是一个单向的关系,它是真的!
基本上,我想要的只是涉及某个参数的JSON关系数组.表示关系的JSON对象应该只包含ID - 就像{id: 1, from: 4, toArgument: 3, type: 1}我想要的那样.
编辑我应该补充说,以前在Argument模型中工作正常的视图现在遇到相同的错误,当请求是在JSON中 - 尽管只使用Arguments!当我甚至根本不改变参数时,为什么完全不同的类中的某些东西会影响参数呢?
@OneToMany(fetch = FetchType.LAZY, mappedBy = "from") @JsonBackReference
public List<Relation> fromThis;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "toArgument") @JsonBackReference
public List<Relation> toThis;
Run Code Online (Sandbox Code Playgroud)
到Argument.
不完全理解为什么,现在我得到了嵌入在JSON中的整个Argument对象 - 而不仅仅是ID,这就是我想要的.哦,我猜.
| 归档时间: |
|
| 查看次数: |
2097 次 |
| 最近记录: |