Hibernate Criteria取消了关联

时间:2015-12-17 18:58:55

标签: java hibernate hibernate-criteria

我有一堂课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*/
  }

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

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

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

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

1 个答案:

答案 0 :(得分:0)

我不相信您可以使用Hibernate Criteria API明确地执行您所要求的操作,因为通常可以接受的做法是创建关联LAZY并将其设置为EAGER的案例 - 以个案为基础。

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

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

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