gpt4 book ai didi

java - 无法修复多对多关系上的延迟加载

转载 作者:行者123 更新时间:2023-12-02 01:26:17 25 4
gpt4 key购买 nike

我与一个名为cuenta 又名帐户的表存在多对多关系

Cuenta.java 看起来像

@ManyToMany(cascade = { CascadeType.ALL })
@JoinTable(
name = "Autorizacion",
joinColumns = { @JoinColumn(name = "id_cuenta") },
inverseJoinColumns = { @JoinColumn(name = "id_cuenta_autorizada") }
)
List<Cuenta> cuentasAutorizadas = new ArrayList<>();

@ManyToMany(mappedBy = "cuentasAutorizadas")
private List<Cuenta> autorizaciones = new ArrayList<>();

因此,我尝试获取有权访问我的帐户的帐户,然后我得到了未能延迟初始化角色 ec.com.myapp.model.Cuenta.cuentasAutorizadas 的集合

我尝试加入,但我不知道我错过了什么这是我的cuentaDao.java

StringBuffer sql = new StringBuffer("Select c from Cuenta c left join c.cuentasAutorizadas left join c.autorizaciones  f WHERE ");
HashMap<String, Object> parametros = new HashMap<String, Object>();

但是如果我尝试检查cuenta.getCuentasAutorizadas() 上的任何内容,我会遇到延迟加载问题。我应该直接查询 autorizacion 表吗???我通常通过创建自己的表来处理这种多对多关系,但我决定给 Hibernate ManyToMany 一个机会。

最佳答案

您可以尝试在查询中使用“left join fetch”吗?

StringBuffer sql = new StringBuffer("Select c from Cuenta c left join fetch c.cuentasAutorizadas left join fetch c.autorizaciones  f WHERE ");
HashMap<String, Object> parametros = new HashMap<String, Object>();

默认情况下,JPA @ManyToOne 和 @OneToOne 注释是 EAGERly 获取的,而 @OneToMany 和 @ManyToMany 关系则被视为 LAZY。这意味着,在加载实体时,JPA 不会加载 @OneToMany 或 @ManyToMany 中另一个的关联。

通过“join fetch”,JPA 还会加载所有关联。他对于 EAGER 也是如此。

另一种方法是在注释中使用属性“fetch”,但不推荐:

@ManyToMany(cascade = {CascadeType.ALL}, fetch = FetchType.EAGER)

关于java - 无法修复多对多关系上的延迟加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57582717/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com