无法修复对许多关系的延迟加载

时间:2019-08-20 23:35:53

标签: java hibernate

我与一个名为cuenta aka Account的表具有自多对多关系

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表吗??? 我通常通过创建自己的表来处理这种多对多的关系,但是我决定给休眠的许多tomtomany一个机会。

1 个答案:

答案 0 :(得分:0)

您可以在查询中尝试“左联接提取”吗?

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批注,而将@OneToMany和@ManyToMany关系视为LAZY。这意味着,在加载您的实体时,JPA并未在@OneToMany或@ManyToMany中的另一个加载关联。

通过“加入获取”,JPA还将加载所有关联。他对EAGER也是如此。

另一种方法是在注释中使用属性“ fetch”,但不建议这样做:

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