我有一堂课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
答案 0 :(得分:0)
我不相信您可以使用Hibernate Criteria API明确地执行您所要求的操作,因为通常可以接受的做法是创建关联LAZY
并将其设置为EAGER
的案例 - 以个案为基础。
因此,请将映射更改为使用fetch = FetchType.LAZY
,然后在查询中需要关联的情况下,将其指定为:
criteria.setFetchMode("usuarioPerfil", FetchMode.JOIN);
如果您可以访问JPA的EntityGraph
注释,我强烈建议您也查看这些注释。至少,您至少可以查看Hibernate的FetchProfile
概念,因为这些概念会按名称定义获取策略,这有助于使代码和查询更加清晰。