【问题标题】:Hibernate Criteria taking off associationsHibernate Criteria 取消关联
【发布时间】:2015-12-17 18:58:54
【问题描述】:

我有一个班级 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

【问题讨论】:

    标签: java hibernate hibernate-criteria


    【解决方案1】:

    我不相信您可以使用 Hibernate Criteria API 明确地执行您的要求,因为通常接受的做法是根据具体情况建立关联 LAZY 并将它们设置为 EAGER

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

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

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

    【讨论】:

    • 非常感谢@Naros,它运行良好。这正是我想要的。
    猜你喜欢
    • 2011-01-26
    • 2012-03-03
    • 1970-01-01
    • 2010-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多