JsonMappingException:无法延迟初始化角色集合

时间:2019-03-15 01:16:43

标签: java hibernate spring-boot

假设我在Java,春季启动,休眠应用程序中有此类:

igraph

,假设这是奖励类:

@Entity
@Table(name="person")
@Getter @Setter @NoArgsConstructor
public class Person{

    @Id
    @Column(name="ID", nullable=false)
    private int Id;

    @Column(name="PERSON_ID")
    private String personId;

    @Column(name="FIRST_NME")
    private String firstName;

    @Column(name="LAST_NME")
    private String lastName;

    @OneToMany(fetch=FetchType.LAZY, mappedBy = "person", cascade = {CascadeType.ALL})
    private List<Award> awards;
}

当我简单地从我的jpa存储库中查找所有内容时,就这样:

@Entity
@Table(name="award")
@Getter @Setter @NoArgsConstructor
public class Award{

    @Id
    @Column(name="COMPOSITE_ID", nullable=false)
    private int Id;

    @Column(name="AWARD_CODE")
    private String awardCode;

    @Column(name="AWARD_NAME")
    private String awardName;

    @ManyToOne
    @JoinColumn(name="PERSON_ID")
    private Personn person;
}

我收到此错误:

List<Person> findAll();

不确定为什么...如果我执行@JsonIgnore,可以使请求正常工作,但是我想要那些奖励子对象。

1 个答案:

答案 0 :(得分:1)

渴望加载是一种设计模式,在该模式中,数据就地发生初始化

惰性是一种设计模式,用于尽可能延迟对象的初始化

启用延迟加载后,如果我们拉起Person,则在未显式调用奖励数据之前,不会初始化Award数据并将其加载到内存中。

在积极的加载策略中,如果我们加载Person,它还将加载与其关联的所有Award,并将其存储在内存中。

所以只需使用fetch=FetchType.Eager

@OneToMany(fetch=FetchType.Eager, mappedBy = "person", cascade = {CascadeType.ALL})
private List<Award> awards;