我与一个名为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一个机会。
答案 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)