spring-boot - “无法初始化代理 - 没有会话”对于父级中的多个多对多关系
问题描述
我有一个具有多个多对多关系的父用户类。
@Table(name = "user")
public class User {
..
@ManyToMany(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE, CascadeType.DETACH})
@JoinTable(
name = "user_address",
joinColumns = { @JoinColumn(name = "user_id")},
inverseJoinColumns = { @JoinColumn(name = "address_id")}
)
@JsonIgnore
private final List<Address> addresses = new ArrayList<Address>();
@ManyToMany(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE, CascadeType.DETACH})
@JoinTable(
name = "reports",
joinColumns = { @JoinColumn(name = "user_id")},
inverseJoinColumns = { @JoinColumn(name = "reports_id")}
)
@JsonIgnore
private final List<Reports> reports = new ArrayList<Reports>();
}
当我访问 FIRST ManyToMany 属性时,一切正常。但是,在访问第一个之后,当我尝试访问 SECOND ManyToMany 属性时,我得到“无法初始化代理 - 无会话”异常:
@Component
public class Combiner {
public void combineData() {
...
List<Address> addresses = user.getAddress(); // This works
List<Reports> reports = user.getReports(); // Get the error here
..
}
}
Address
和类与上面的实体Reports
有许多多对多的反比关系。User
public class Address {
@ManyToMany(mappedBy = "addresses", fetch = FetchType.LAZY)
private final List<User> users = new ArrayList<User>();
}
public class Reports {
@ManyToMany(mappedBy = "reports", fetch = FetchType.LAZY)
private final List<User> users = new ArrayList<User>();
}
我尝试搜索相同的错误,其中有像我这样的多个关系,第一次通过但第二次失败,但找不到帖子(或者谷歌无法理解搜索词,如果有人知道预先存在的一个 -请告诉我)。有人可以评估我还缺少什么吗?
到目前为止,我已经尝试过这些无济于事:
Combiner
向上面调用的父 Service 类添加了 @Transactional- 提出了第二次失败的关系
EAGER
。(据我所知,你不能同时做 BOTH EAGER,因为我可能因为笛卡尔连接而收到多包错误)
AM 使用 SpringBoot (2.2.4) 和 Hibernate Core {5.4.10.Final}
解决方案
方法一:
单向@ManyToMany
。异常清楚地表明它无法初始化role
您在User
课堂上的集合。
正如您在评论部分中所问的那样,为什么这个用例不能是双向的——您也可以这样bi-directional
做。
方法二:制作role
EAGER集合或者使用Hibernate.initialize()
初始化集合。
奖励:您可以collection
EAGER
使用Set
not来制作两者List
。
推荐阅读
- node.js - 连接 ECONNREFUSED 127.0.0.1:3000 - DB Mongoose 与 Nodejs
- php - 将客户信息发送到我的电子邮件并同时付款的 Paypal 付款表格
- javascript - 如何在浏览器上下载从 fetch 返回的 ReadableStream
- r - 无法为空矩阵中的第 7 列和第 7 行赋值
- coq - 重用 lia 策略来证明可判定性
- magento2 - 使用 UI 组件在前端创建表单。按钮不显示
- python - 我应该在 Keras Input 类中使用什么形状?
- java - 麻烦调用另一个类的方法而不必实例化它
- android - 为 RecyclerView 中的每个单元格添加填充
- java - Selenium java,在xpath匹配多个元素的情况下等待xpath元素和匹配文本