Java 如何使用Hibernate避免不必要的查询?

Java 如何使用Hibernate避免不必要的查询?,java,spring,hibernate,spring-mvc,jpa,Java,Spring,Hibernate,Spring Mvc,Jpa,我想对一个名为“利用者”的实体进行查询: @Override @Transactional public List<Utilisateur> list() { String hql = "from Utilisateur where deleted is null or deleted <> 1"; Query query = sessionFactory.getCurrentSession().createQuery(hql); @Supp

我想对一个名为“利用者”的实体进行查询:

@Override
@Transactional
public List<Utilisateur> list() {

    String hql = "from Utilisateur where deleted is null or deleted <> 1";

    Query query = sessionFactory.getCurrentSession().createQuery(hql);

    @SuppressWarnings("unchecked")
    List<Utilisateur> listUser = (List<Utilisateur>) query.list();

    return listUser;

}

@Entity
@Table(name = "utilisateur")
public class Utilisateur {

    @Id
    @SequenceGenerator(name="s_utilisateur", sequenceName="s_utilisateur", allocationSize=1)
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="s_utilisateur")
    @Column(name = "user_code")
    private Long code;

    @Column(name = "user_nom")
    private String nom;

    @Column(name = "user_prenom")
    private String prenom;

    @Column(name = "user_login")
    private String login;

    @ManyToOne
    @JoinColumn(name = "struct_code")
    private Structure structure;

    ...

}
@覆盖
@交易的
公开名单(){
String hql=“from usilisateur,其中deleted为null或deleted 1”;
Query Query=sessionFactory.getCurrentSession().createQuery(hql);
@抑制警告(“未选中”)
List listUser=(List)query.List();
返回列表用户;
}
@实体
@表(name=“usilisateur”)
公共类利用者{
@身份证
@SequenceGenerator(name=“s_-Usiliateur”,sequenceName=“s_-Usiliateur”,allocationSize=1)
@GeneratedValue(策略=GenerationType.SEQUENCE,generator=“s_-Usilizateur”)
@列(name=“user\u code”)
私有长码;
@列(name=“user\u nom”)
私有字符串名称;
@列(name=“user\u prenom”)
私有字符串prenom;
@列(name=“user\u login”)
私有字符串登录;
@许多酮
@JoinColumn(name=“结构代码”)
私有结构;
...
}
正如您所看到的,有structure类型的属性结构。这里是实体结构:

@Entity
@Table(name = "structure")
public class Structure {

    @Id()
    @Column(name="struct_code") 
    private String code;

    @ManyToOne
    @JoinColumn(name = "str_struct_code")
    private Structure parent;

    @ManyToOne
    @JoinColumn(name="niv_struct_code") 
    private NiveauStructure niveauStructure;

    @ManyToMany(fetch = FetchType.EAGER, mappedBy = "structures")
    @JsonBackReference
    private Set<Cdmt> programmes = new HashSet<Cdmt>();

    @Column(name="struct_lib")
    private String lib;

    ...

}
@实体
@表(name=“structure”)
公共阶级结构{
@Id()
@列(name=“struct\u code”)
私有字符串码;
@许多酮
@JoinColumn(name=“str\u struct\u code”)
私有结构母公司;
@许多酮
@JoinColumn(name=“niv\u结构\u代码”)
私有NiveauStructure NiveauStructure;
@ManyToMany(fetch=FetchType.EAGER,mappedBy=“structures”)
@JsonBackReference
私有集程序=新的HashSet();
@列(name=“struct\u lib”)
私有字符串库;
...
}
还有属性程序,下面是它的代码:

@Entity
@Table(name = "cdmt")
public class Cdmt {

    @Id
    @Column(name = "cdmt_code")
    private String code;

    @ManyToOne
    @JoinColumn(name = "class_cdmt_code")
    private ClasseCdmt classeCdmt;

    @Column(name="cdmt_design")
    @Lob
    private String lib;

    @ManyToOne
    @JoinColumn(name = "prog_code")
    private Pmo pmo;

    @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.MERGE)
    @JoinTable(name = "programme_structure" , joinColumns = {@JoinColumn(name = "cdmt_code")} , inverseJoinColumns = {@JoinColumn(name = "struct_code")} )
    @JsonManagedReference
    private Set<Structure> structures = new HashSet<Structure>();

    @ManyToOne
    @JoinColumn(name = "cdm_cdmt_code")
    private Cdmt cdmtParent;

    ...
}
@实体
@表(name=“cdmt”)
公共类Cdmt{
@身份证
@列(name=“cdmt\U代码”)
私有字符串码;
@许多酮
@JoinColumn(name=“class\u cdmt\u代码”)
私有类ECDMT类ECDMT;
@列(name=“cdmt\U设计”)
@高球
私有字符串库;
@许多酮
@JoinColumn(name=“程序代码”)
私营项目办;
@ManyToMany(fetch=FetchType.EAGER,cascade=CascadeType.MERGE)
@JoinTable(name=“program_structure”,joinColumns={@JoinColumn(name=“cdmt_code”)},inverseJoinColumns={@JoinColumn(name=“struct_code”)})
@JsonManagedReference
私有集结构=新HashSet();
@许多酮
@JoinColumn(name=“cdm\U cdmt\U代码”)
私人Cdmt Cdmt父母;
...
}
在运行时,控制台中会显示许多查询,其中有针对Pmo实体的查询,尽管查询中没有提到该实体!那么,如何避免这种查询的传播呢

更新:

以下是控制台中的查询跟踪:

(代码)编程。cdmt。cdmt。cdmt。cdmt。cdmt。cdmt的评论作为cdmt的评论作为cdmt的注释作为cdmt的评论作为cdmt的注释作为cdmt的注释作为cdmt的注释作为cdmt的注释作为cdmt的注释作为cdmt的注释作为cdmt。cdmt。cdmt。cdmt。cdmt。cdmt。cdm。cdm。cdm。cdm。cdmt。cdmt。cdmt。cdmt。cdmt。cdmt。cdmt。cdmt。cdmt。cdmt。cdmt。cdmt。cdmt。cdmt的注释作为cdmt作为cdmt的注释作为cdmt作为cdmt的评论作为cdmt作为cdmt的评论作为cdmt的评论作为cdmt的评论作为cdmt的注释作为cdmt的评论作为cdmt。评论作为cdmt的评论作为cdmt的评论作为cdmt。对2的评论2,2。4.4.4.4.4.4.4.4.4.4.1.1.1.1作为cdmt首次亮相,cdmt1.cdmt1.cdmt1.cdmt1.cdmt1.cdmt1.cdmt1.cdmt1.cdmt1.cdmt1.cdmt1.cdmt1.cdmt1.cdmt1.cdmt1.cdmt2.cdmt1.cdmt1.cdmt1.cdmt1.cdmt1.cdmt1.cdmt.cdmt.cdmt.cdmt.cdmt.cdmt.cdmt.cdmt.cdmt.cdmt.cdmt.cdmt.cdmt.cdmt.cdmt.cdmt.cdmt.cdmt.cdmt.cdmt.cdmt.cdmt.cdmt.cdmt.cdmt.cdmt.cdmt.cdmt.cdmt.cdmt.cdmt.cdmt.cdmt.cdmt.cdmt.cdmt.cdmt.cdmt.cdmt.cdmt编码编码编码作为cdmt.编码作为cdmt.编码作为cdmt.编码作为cdmt.编码作为cdmt.编码作为cdmt.编码编码2.类cdmt代码作为类cdmt代码8\U 4\U 2,cdmt2.cdmt2.cdmt2.cdmt2.cdmt2.cdmt2.cdmt2.cdmt2.删除为删除为删除为删除4 4 4 4 2,cdmt2.cdmt2.cdmt2.cdmt2.cdmt2.cdmt2.cdmt2.cdmt2.cdmt2.cdmt2.cdmt2.cdmt2.cdmt设计作为cdmt设计作为cdmt设计作为cdmt设计作为cdmt的设计作为cdmt设计作为cdmt设计作为cdmt设计作为cdmt的设计,设计6 6 6设计6 6 6 4 4 4 2,2,CD2,CD2,cdmt2,CD2,cdmt2。cdmt2。cdmt2。进步代码作为作为注释注释注释注释注释注释注释。作为代码作为进步代码作为一个注释注释注释注释注释作为代码作为编码编码9编码编码编码4 4 4 4 4 4 4 4,2,2,2,2,2,2,2,2,2,2,2,2,2,2(三),3.类CDMT3.类CDMT3.类CDMT3.类CDMT3.类CDMT3.类CDMT3.类CDMT3.类CDMT3.类CDMT3.类CDMT3.类CDMT3.类CDMT3.类CDMT3.类CDMT3.类CDMT3.类CDMT3.类CDMT3.类CDMT3.类CD3.类CD3.类CDMT3.类CDM.新发现的一个新一个新一个新的一个新的一个新的一个新的一个新的一个新的一个新的一个新的一个新的一个新的一个等级CDMT3.新的等级CDMT4.新的一个新的一个新的一个新的一个新的一个新的一个新的一个新的一个新的一个新的一个新的一个新的一个新的一个新的一个新的一个新的等级CDMT3.新的U设计为程序设计4(U 31)(U 4),,4.pmo 4.pmo 4.pmo 4.pmo 4.pmo 4.P N D代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码代码MO5.等级pmo\U niveau作为等级pmo\U niveau 4\U 6\U 5,6、pmo 6、PM6。类pmo pmo编码作为类pmo pmo pmo编码作为类pmo pmo pmo pmo编码作为类pmo pmo pmo pmo编码6、6、6、6、PM6。pmo 6。项目代码作为项目代码作为项目代码作为项目代码作为项目代码编码编码编码作为项目代码作为项目代码作为项目代码作为项目代码作为项目代码作为项目代码作为项目代码作为项目代码作为项目代码作为项目代码作为项目代码作为项目代码作为项目代码作为项目代码作为项目代码作为项目代码作为项目代码作为项目代码作为项目代码作为项目pmo pmo pmo pmo pmo编码作为项目代码作为项目代码作为项目代码作为项目代码作为项目pmo pmo pmo pmo编码作为项目代码作为项目代码作为项目代码作为项目代码作为项目代码作为类pmo pmo pmo pmo pmo pmo编码作为项目代码作为项目代码,pmo编码作为项目代码作为项目代码作为项目代码作为项目作为项目作为项目代码作为项目代码作为项目代码作为项目代码作为项目代码作为项目项目注释为项目注释5,31,6,pnd7.pnd7.pnd7.pnd7.pnd7.pnd7.pnd7.pnd7.pnd7.pnd7.pnd7.pnd7.pnd7.pnd7.pnd7.pnd7.pnd7.pnd7.作为pnd7.pnd7.作为pnd7.pnd7.pnd7.pnd7.pnd7.pnd7.作为pnd7.pnd7.pnd7.pnd7.pnd7.pnd7.首次亮相作为pnd7.作为pnd7.作为pnd7.作为Pnd3.作为Pnd3.你们首次亮相作为Pnd3.你们作为Pnd3.你们们作为Pnd3.去去去去去去去去去了去了去了去了去了去了去了去了去了去了去了去了去了去了去了去了去了去了去了去了去了去了去了去了去了去了去了10_32_7_,pnd7。所有者作为所有者8_32_7_,pnd7.pnd7.pnd7.Pnd4.发表评论评论作为pnd的评论,评论,评论,评论,评论,评论,评论,7,7,目标8。obj.obj.obj.obj.obj.obj.obj.obj.obj.obj.obj.obj.obj.obj.作为评论的评论,评论作为obj.评论作为obj.评论的评论,评论2 2,8,目标8,目标8。ob8.创建作为创造作为创造作为创造作为创造作为创造作为3.25.25.25.8,25.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.创造作为创造作为创造作为创造作为创造作为创造作为创造作为创造作为创造作为创造作为创造作为创造作为创造作为3.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8 6_25_8_,(8)目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标8。目标obj。目标8。目标8。目标8。目标8。目标8。目标8。MT代码7、cdmt9、cdmt注释为cdmt注释2、cdmt注释4、cdmt注释9、,cdmt9.cdmt9.cdmt9.cdmt9.cdmt9.cdmt9.cdmt9.cdmt9.cdmt9.cdmt9.cdmt9.cdmt9.cdmt9.cdmt9.cdmt9.cdmt9.CDM.CDM.CDM.CDM.CDM.CDM.CDMTT.CDM.CDM.CDM.CDM.CDM.CDM.CDM.CDM.CDM.CDM.CDMTU首次亮相CDM.CDM.CDM.CDM.CDM.CDM.CDM.CDM.CDM.CDM.CDM.CDM.CDM.CDM.CDM.CDM.CDM.CDM.CDM.CDM.CDM.CDM.CDM.CDM.CDM.CDM.CDM.CDM.CDM.CDM.CDM.CDM.CDM.CDM.CDM.CDM.CDM.CDM.CDM.CDM.23、自然目标
@Entity
@Table(name = "complex_object")
public class ComplexObject {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id_complex_object")
    private Integer id;

    @Column(name = "label")
    private String label;

    // More relations...

}
@NamedNativeQueries({
        @NamedNativeQuery(name = "ComplexObject.getIdAndLabel", query = "SELECT co.id_complex_object, co.label FROM complex_object", resultSetMapping = "SimpleObject")
})
public class SimpleObject {

    private Integer id;
    private String label;

    /**
     * This constructor is very important !
     * Its signature has to match the SqlResultSetMapping defined in the entity class.
     * Otherwise, an exception will occur.
     */
    public SimpleObject(Integer id, String label) {
        this.id = id;
        this.label = label;
    }

    // Getters and setters...
}
@SqlResultSetMappings({
    @SqlResultSetMapping(name = "SimpleObject", classes = {
        @ConstructorResult(targetClass = SimpleObject.class, columns = {
            @ColumnResult(name = "id_complex_object", type = Integer.class),
            @ColumnResult(name = "label", type = String.class)
        })
    })
})