繁体   English   中英

为什么 hibernate @ManyToOne 为同一个表生成多个 select 查询?

[英]Why hibernate @ManyToOne generating multiple select query for same table?

为什么 Hibernate 为同一个表/实体生成多个 select 语句? 以下是@ManyToOne 映射:

class Student{

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "student_id", insertable = false, updatable = false, referencedColumnName = "student_id")
    Subject subject;
}

生成的 HQL:3 次 select 查询正在为主题表生成

Hibernate: 
    select
        subject0_.subject_cd as subject_cd1_12_0_,
        subject0_.subjectname as subject_name_12_0_ 
    from
        smart.vw_subject subject0_
    where
        fundhierar0_.subject_cd =?
Hibernate: 
    select
        subject0_.subject_cd as subject_cd1_12_0_,
        subject0_.subjectname as subject_name_12_0_ 
    from
        smart.vw_subject subject0_
    where
        fundhierar0_.subject_cd =?
Hibernate: 
    select
        subject0_.subject_cd as subject_cd1_12_0_,
        subject0_.subjectname as subject_name_12_0_ 
    from
        smart.vw_subject subject0_
    where
        fundhierar0_.subject_cd =?

Hibernate 提供了多种检索数据的策略。 很少有Selectjoinbatch

但是,这似乎是 N+1 问题。 第一个查询从数据库中检索 N 条记录。 对于每个父母,一个新的查询检索孩子。 因此,对于 N Parent,N 个查询从子表中检索信息。

获取策略取决于我们的应用程序是如何工作的,所以就让你去做吧。 您可以在此处找到更多详细信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM