Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 网格生成太多hibernate查询-FetchMode.JOIN不';行不通_Java_Hibernate_Spring Mvc_Hql_Hibernate Mapping - Fatal编程技术网

Java 网格生成太多hibernate查询-FetchMode.JOIN不';行不通

Java 网格生成太多hibernate查询-FetchMode.JOIN不';行不通,java,hibernate,spring-mvc,hql,hibernate-mapping,Java,Hibernate,Spring Mvc,Hql,Hibernate Mapping,我正在使用SpringMVC和Hibernate开发一个webapp。问题是,我需要显示我客户的所有客户,每个客户都有另一个相关实体(“Cobrador”,对不起,我不知道这里的英文翻译),我使用JQgrid来实现这个目标。当我执行网格时,我在日志中看到: Hibernate: select cliente0_.id as id1_0_, cliente0_.activo as activo2_0_, cliente0_.apellido as apellido3_0_, cliente0_.c

我正在使用SpringMVC和Hibernate开发一个webapp。问题是,我需要显示我客户的所有客户,每个客户都有另一个相关实体(“Cobrador”,对不起,我不知道这里的英文翻译),我使用JQgrid来实现这个目标。当我执行网格时,我在日志中看到:

Hibernate: select cliente0_.id as id1_0_, cliente0_.activo as activo2_0_, cliente0_.apellido as apellido3_0_, cliente0_.cobrador as cobrador8_0_, cliente0_.dni as dni4_0_, cliente0_.email as email5_0_, cliente0_.nombre as nombre6_0_, cliente0_.telefono as telefono7_0_ from clientes cliente0_ where cliente0_.activo=1
Hibernate: select cobrador0_.id as id1_1_0_, cobrador0_.activo as activo2_1_0_, cobrador0_.apellido as apellido3_1_0_, cobrador0_.dni as dni4_1_0_, cobrador0_.email as email5_1_0_, cobrador0_.nombre as nombre6_1_0_, cobrador0_.telefono as telefono7_1_0_ from cobradores cobrador0_ where cobrador0_.id=?
Hibernate: select cobrador0_.id as id1_1_0_, cobrador0_.activo as activo2_1_0_, cobrador0_.apellido as apellido3_1_0_, cobrador0_.dni as dni4_1_0_, cobrador0_.email as email5_1_0_, cobrador0_.nombre as nombre6_1_0_, cobrador0_.telefono as telefono7_1_0_ from cobradores cobrador0_ where cobrador0_.id=?
Hibernate: select cobrador0_.id as id1_1_0_, cobrador0_.activo as activo2_1_0_, cobrador0_.apellido as apellido3_1_0_, cobrador0_.dni as dni4_1_0_, cobrador0_.email as email5_1_0_, cobrador0_.nombre as nombre6_1_0_, cobrador0_.telefono as telefono7_1_0_ from cobradores cobrador0_ where cobrador0_.id=?
基本上是获取客户机,然后,对于每个客户机,go获取相关的“cobrador”。我的客户端实体配置如下:

@Entity
@Table(name="clientes")
public class Cliente {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;    
private String apellido;
private String nombre;
private int dni;
private String telefono;
private String email;
private boolean activo;
@ManyToOne
@JoinColumn(name="cobrador")
@Fetch(FetchMode.JOIN)
private Cobrador cobrador;

//Contructors, getters and setters
}
顺便说一句:最后的休眠执行是:

@Override
@Transactional
public List<T> getAllFiltering(String filter) { 
    Query q = sessionFactory.getCurrentSession().createQuery("from " + type.getSimpleName() + " " + filter);
    return q.list();
}
@覆盖
@交易的
公共列表getAllFiltering(字符串筛选器){
Query q=sessionFactory.getCurrentSession().createQuery(“从”+type.getSimpleName()+“+filter”);
返回q.list();
}
其中为,过滤器为“Where activo=true”

在加载网格时,是否需要配置此关系以仅执行一个查询


提前谢谢

我知道这不是很方便,但是如果您使用
HQL
查询(即使用createQuery方法),则
Hibernate
将不会使用fetch策略。如果要使其正常工作,必须使用
条件
API或在HQL查询中指定联接

在您的情况下,查询可能如下所示:

from Cliente c left join fetch c.cobrador
从:

映射文档中定义的获取策略影响:

  • 通过get()或load()进行检索
  • 导航关联时隐式发生的检索
  • 条件查询
  • HQL查询是否使用了子选择获取
如您所见,定义的获取策略不会影响HQL查询
如果连接是抓取模式。

标准就像一个符咒。我不认识他们,非常感谢!