java - JsonMappingException : failed to lazily initialize a collection of role

标签 java hibernate spring-boot

假设我的 Java、Spring Boot、Hibernate 应用程序中有这个类:

@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;
}

假设这是奖项类别:

@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;
}

当我从我的 jpa 存储库中进行简单的查找时,如下所示:

List<Person> findAll();

我收到此错误:

failed to lazily initialize a collection of role: com.my.proj.datastores.legacy.model.Person.awards, could not initialize proxy - no Session; nested exception is com.fasterxml.jackson.databind.JsonMappingException: failed to lazily initialize a collection of role: com.my.proj.datastores.legacy.model.Person.awards, could not initialize proxy - no Session (through reference chain: com.my.proj.datastores.ngl.model.Person["awards"])]

不太清楚为什么......如果我执行@JsonIgnore,我可以使请求工作,但我想要那些奖励子对象。

最佳答案

预加载是一种当场进行数据初始化的设计模式

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

当启用延迟加载时,如果我们拉起一个 Person,奖励数据将不会被初始化并加载到内存中,直到对其进行显式调用。

在急切加载策略中,如果我们加载 Person,它也会加载与其关联的所有 Award 并将其存储在内存中。

所以只需使用fetch=FetchType.Eager

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

关于java - JsonMappingException : failed to lazily initialize a collection of role,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55174242/

相关文章:

linux - 创建目录并将图像上传到远程网络服务器

java - 如何为JUnit测试用例禁用EhCache

java - JPA - 带有左连接和计数的 TypedQuery

hibernate - Solr,Hibernate和QueryDSL与分片

java - org.hibernate.exception.SQLGrammarException : could not prepare statement; nested exception is javax. 持久性.PersistenceException

java - org.springframework.beans.NotReadablePropertyException : Invalid property 'user' of bean class [com. jit.model.Signup]:

java - 弹性4j - 请求超时

java - 用 ImageIcon 刷新 JButton 的方法有哪些?

java - 参数为 'name' 的数组创建方法 : Scope Error

java - CombineFileInputFormat Hadoop 0.20.205 的实现