Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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
为select生成hibernate sql_Hibernate_Jpa_Spring Boot - Fatal编程技术网

为select生成hibernate sql

为select生成hibernate sql,hibernate,jpa,spring-boot,Hibernate,Jpa,Spring Boot,我有两个实体,一个叫natureza,另一个叫subnatureza @Entity(name = "natureza") @SuppressWarnings("serial") public class Natureza extends AbstractEntity{ String nome; @JoinColumn(name="natureza_id") @JsonIgnore private Set<SubNatureza> subNat

我有两个实体,一个叫natureza,另一个叫subnatureza

@Entity(name = "natureza")
@SuppressWarnings("serial")
public class Natureza extends AbstractEntity{
    String nome;    
    @JoinColumn(name="natureza_id")
    @JsonIgnore
    private Set<SubNatureza> subNaturezas;

}

@Entity
@Table(name = "sub_natureza")
public class SubNatureza extends AbstractEntity{
    private String nome;

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }
}
@实体(name=“natureza”)
@抑制警告(“串行”)
公共类Natureza扩展了AbstractEntity{
字符串名称;
@JoinColumn(name=“natureza_id”)
@杰索尼奥雷
私有集子网;
}
@实体
@表(name=“sub_natureza”)
公共类SubNatureza扩展了AbstractEntity{
私有字符串名称;
公共字符串getNome(){
返回nome;
}
公共无效集合名称(字符串名称){
this.nome=nome;
}
}
在我的natureza表格中,我有5行,在subnatureza表格中有10行(每个natureza有2行) 所以当我运行NaturezaRepository.findAll()时;hibernate在控制台中为每个natureza在subnatureza中显示一个选择(在我的示例中为5个选择)

对吗?因为如果在我的数据库中,我只运行:

选择*from natureza n JOIN sub_natureza s ON n.id=s.natureza_id一次


当您尝试
NaturezaRepository.findAll()时,tks处于休眠状态您实际上正在尝试

Select * from natureza n 
当您以本机查询的形式运行这是Mysql时,它将给您5条记录,这也是Hibernate所做的。那么回答你的问题,这是正确的吗?是的

NaturezaRepository.findAll();hibernate在控制台中为每个natureza在subnatureza中显示一个选择(在我的示例中为5个选择)

因此,您总共看到6个查询,这是一个典型的n+1问题。

您可以在
NaturezaRepository
上的
findAll
方法上使用。如果
NaturezaRepository
中还没有方法,则创建
findAll()
方法

@EntityGraph(attributePaths = {"subNaturezas"})
Page<Natureza> findAll()
@EntityGraph(attributePath={“subNaturezas”})
页码findAll()
另一个选项是在
findAll
方法之上使用