![](/img/trans.png)
[英]Hibernate: LazyInitializationException: failed to lazily initialize a collection of role. Could not initialize proxy - no Session
[英]Failed to lazily initialize a collection of role. Simple JPA findById
我也在使用 Spring 和 JPA(Hibernate with MySQL)和 Lombok。
嗨,我的实体有这部分:
@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "entitya")
public class EntityA implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="ea_id")
Long id;
....
@ManyToOne
@JoinColumn(name="g_id", nullable=false)
private Group group;
....
}
@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "group")
public class Group implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="g_id")
private Long id;
@OneToMany(mappedBy="group")
private List<EntityA> enitiesA = new ArrayList<>();
...
}
我还实现了存储库扩展 JPARepository。 进入我的控制器,如果我尝试通过 Id 检索 EntityA,我会获得此异常:
failed to lazily initialize a collection of role: com.mytest.entity.Group.enitiesA, could not initialize proxy - no Session
对我来说这很奇怪,因为我只需要检索对象。 我不使用一些 getter 方法。 因此,理论上,使用默认提取类型,我不需要也有组列表。
怎么了?
您是否正在使用 toString() 调试您的对象?
以防它可能是由@Data 注释引起的错误。
生成的 toString() 方法包含所有字段,因此它可能会调用 enitiesA 变量,从而产生延迟初始化错误。
https://mdeinum.github.io/2019-02-13-Lombok-Data-Ojects-Arent-Entities/
可能是因为您在事务边界之外访问 group.enitiesA。 如果你想这样做,你可以通过将 Eager fetch 类型添加到 OneToMany 映射中来获取它们,例如
@OneToMany(mappedBy="group", fetch = FetchType.EAGER)
这将在加载父对象时加载整个对象图。
如果您仍然想做延迟加载,请考虑将所有调用封装到加载父级的会话下的子级中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.