Hibernate Criteria 取消关联

Hibernate Criteria taking off associations

我有一个 class Usuario。用户与 UsuarioPerfil 有关联:

public class Usuario{

  /*Attributes*/

  @OneToOne(fetch = FetchType.EAGER)
  @JoinColumn(name = "id_usuario_perfil", referencedColumnName = "id", foreignKey = @ForeignKey(name = "fk_usuario_id_usuario_perfil"))
  @Getter
  @Setter
  private UsuarioPerfil usuarioPerfil;

  }

  public class UsuarioPerfil{

    /*Attributes*/
  }

我正在使用条件执行查询,如下所示:

  Session sessao = this.getEntityManager().unwrap(Session.class);
  sessao.createCriteria(Usuario.class).list();

但是,在某些情况下,愿望清单不会出现在数据 UsuarioPerfil 实体中,只有用户。我如何使用 Hibernate Criteria 完成此操作?

注意:我知道这可以使用 Hibernate 或 JPA Query

我不相信您可以使用 Hibernate Criteria API 明确地执行您要求的操作,因为建立关联 LAZY 并将它们设置为 EAGER 是普遍接受的做法视具体情况而定。

因此,将映射更改为使用 fetch = FetchType.LAZY,然后在查询中需要关联的情况下,将其指定为:

criteria.setFetchMode("usuarioPerfil", FetchMode.JOIN);

如果您有权访问 JPA 的 EntityGraph 注释,我强烈建议您也查看这些注释。至少,您至少可以看看 Hibernate 的 FetchProfile 概念,因为这些概念沿用了通过名称定义获取策略的方式,这有助于使代码和查询更清晰。