JPA双向Onetomany json无限循环

Ada*_*Yao 5 java json hibernate jackson

该特定环境下的程序\xef\xbc\x9a\n EJB3.0 + JPA + jersey Web Service

\n\n

第一个实体:

\n\n
@Entity\n@Table(name = "student_by_test_yao")\n\npublic class StudentTest implements Serializable {\n    @Id\n    @GeneratedValue\n    private Integer id;\n    private String name;\n\n    @ManyToOne\n    @JoinColumn(name = "class_id")\n    private ClassTest classes;\n\n    public StudentTest() {}\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

第二实体:

\n\n
@Entity\n@Table(name = "class_by_test_yao")\npublic class ClassTest implements Serializable{\n    @Id\n    @GeneratedValue\n    private Integer id;\n    private String name;\n\n    @OneToMany(mappedBy = "classes",cascade = CascadeType.ALL, fetch=FetchType.EAGER)\n    private List<StudentTest> students;\n\n    public ClassTest() {}\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

当我拿到ClassTest的学生名单时。\n例外是:

\n\n
com.fasterxml.jackson.databind.JsonMappingException:\nInfinite recursion (StackOverflowError)\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果我更改获取 FetchType.LAZY 异常是:

\n\n
org.hibernate.LazyInitializationException: \nfailed to lazily initialize a collection of role: \ncn.gomro.mid.core.biz.goods.test.ClassTest.students, \ncould not initialize proxy - no Session\n
Run Code Online (Sandbox Code Playgroud)\n\n

如何解决我的问题?

\n

小智 5

@JsonIgnore
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "userId")
private User user;
Run Code Online (Sandbox Code Playgroud)

确实有效。我刚刚在双向 @ManyToOne 映射上尝试过。它固定了

com.fasterxml.jackson.databind.JsonMappingException:无限递归(StackOverflowError)


Vya*_*ina 3

尝试将@JsonIgnore注释添加到字段之一以避免循环