我正在尝试在JPA 2中进行一些查询,但它不断调用另一个查询来获取依赖项的信息我的课程是:@Entity@Table(name = "tbltranslados")public class Traslado implements Serializable { @OneToOne(optional = true, mappedBy = "traslado", fetch = FetchType.LAZY) private TrasladoHora hora;}@Entity@Table(name = "tbltranshora")public class TrasladoHora implements Serializable { @OneToOne(optional = false,fetch=FetchType.LAZY) @JoinColumn(nullable = false, name = "thr_TransladosID") private Traslado traslado;}我这样调用查询:@SuppressWarnings("unchecked")@Overridepublic List<Traslado> listarAtivos() { return this.session.createQuery("SELECT t , h FROM Traslado t LEFT JOIN t.hora h WHERE t.status=:status ORDER BY t.origem , t.destino") .setParameter("status", true) .getResultList();}但是我的结果是: 休眠:选择traslado0_.TransladosID为Translad1_14_0_,trasladoho1_.TranshoraID为Transhor1_13_1_,traslado0_.tra_Para为tra_Para2_14_0_,traslado0_.tra_De为tra_De3_14_0_,traslado0_.tra_Status为tra_Stat4_14_0_,从traslado0_左外连接tbltranslados trasladoho1_.thr_qtdHoras为thr_qtdH2_13_1_,trasladoho1_.thr_TransladosID为thr_Tran3_13_1_ tsltranshora trasladoho1_ on traslado0_.TransladosID = trasladoho1_.thr_TransladosID其中traslado0_.tra_Status =?按traslado0_.tra_De,traslado0_.tra_Para排序 休眠:从tbltranshora trasladoho0_ID中选择trasladoho0_.TranshoraID作为Transhor1_13_0_,选择trasladoho0_.thr_qtdHoras作为thr_qtdH2_13_0_,trasladoho0_.thr_TransladosID作为thr_Tran3_13_0_。 休眠:从tbltranshora trasladoho0_ID中选择trasladoho0_.TranshoraID作为Transhor1_13_0_,选择trasladoho0_.thr_qtdHoras作为thr_qtdH2_13_0_,trasladoho0_.thr_TransladosID作为thr_Tran3_13_0_。 休眠:从tbltranshora trasladoho0_ID中选择trasladoho0_.TranshoraID作为Transhor1_13_0_,选择trasladoho0_.thr_qtdHoras作为thr_qtdH2_13_0_,trasladoho0_.thr_TransladosID作为thr_Tran3_13_0_。 休眠:从tbltranshora trasladoho0_ID中选择trasladoho0_.TranshoraID作为Transhor1_13_0_,选择trasladoho0_.thr_qtdHoras作为thr_qtdH2_13_0_,trasladoho0_.thr_TransladosID作为thr_Tran3_13_0_。 休眠:从tbltranshora trasladoho0_ID中选择trasladoho0_.TranshoraID作为Transhor1_13_0_,选择trasladoho0_.thr_qtdHoras作为thr_qtdH2_13_0_,trasladoho0_.thr_TransladosID作为thr_Tran3_13_0_。 休眠:从tbltranshora trasladoho0_ID中选择trasladoho0_.TranshoraID作为Transhor1_13_0_,选择trasladoho0_.thr_qtdHoras作为thr_qtdH2_13_0_,trasladoho0_.thr_TransladosID作为thr_Tran3_13_0_。 休眠:从tbltranshora trasladoho0_ID中选择trasladoho0_.TranshoraID作为Transhor1_13_0_,选择trasladoho0_.thr_qtdHoras作为thr_qtdH2_13_0_,trasladoho0_.thr_TransladosID作为thr_Tran3_13_0_。 休眠:从tbltranshora trasladoho0_ID中选择trasladoho0_.TranshoraID作为Transhor1_13_0_,选择trasladoho0_.thr_qtdHoras作为thr_qtdH2_13_0_,trasladoho0_.thr_TransladosID作为thr_Tran3_13_0_。 休眠状态:从tbltranshora trasladoho0_ID中选择trasladoho0_.TranshoraID作为Transhor1_13_0_,选择trasladoho0_.thr_qtdHoras作为thr_qtdH2_13_0_,trasladoho0_.thr_TransladosID作为thr_Tran3_13_0_。 休眠:从tbltranshora trasladoho0_ID中选择trasladoho0_.TranshoraID作为Transhor1_13_0_,选择trasladoho0_.thr_qtdHoras作为thr_qtdH2_13_0_,trasladoho0_.thr_TransladosID作为thr_Tran3_13_0_。 休眠:从tbltranshora trasladoho0_ID中选择trasladoho0_.TranshoraID作为Transhor1_13_0_,选择trasladoho0_.thr_qtdHoras作为thr_qtdH2_13_0_,trasladoho0_.thr_TransladosID作为thr_Tran3_13_0_。 休眠:从tbltranshora trasladoho0_ID中选择trasladoho0_.TranshoraID作为Transhor1_13_0_,选择trasladoho0_.thr_qtdHoras作为thr_qtdH2_13_0_,trasladoho0_.thr_TransladosID作为thr_Tran3_13_0_。 休眠:从tbltranshora trasladoho0_ID中选择trasladoho0_.TranshoraID作为Transhor1_13_0_,选择trasladoho0_.thr_qtdHoras作为thr_qtdH2_13_0_,trasladoho0_.thr_TransladosID作为thr_Tran3_13_0_。 休眠:从tbltranshora trasladoho0_ID中选择trasladoho0_.TranshoraID作为Transhor1_13_0_,选择trasladoho0_.thr_qtdHoras作为thr_qtdH2_13_0_,trasladoho0_.thr_TransladosID作为thr_Tran3_13_0_。 休眠状态:从tbltranshora trasladoho0_ID中选择trasladoho0_.TranshoraID作为Transhor1_13_0_,选择trasladoho0_.thr_qtdHoras作为thr_qtdH2_13_0_,trasladoho0_.thr_TransladosID作为thr_Tran3_13_0_。 休眠:从tbltranshora trasladoho0_ID中选择trasladoho0_.TranshoraID作为Transhor1_13_0_,选择trasladoho0_.thr_qtdHoras作为thr_qtdH2_13_0_,trasladoho0_.thr_TransladosID作为thr_Tran3_13_0_。 休眠:从tbltranshora trasladoho0_ID中选择trasladoho0_.TranshoraID作为Transhor1_13_0_,选择trasladoho0_.thr_qtdHoras作为thr_qtdH2_13_0_,trasladoho0_.thr_TransladosID作为thr_Tran3_13_0_。 休眠:从tbltranshora trasladoho0_ID中选择trasladoho0_.TranshoraID作为Transhor1_13_0_,选择trasladoho0_.thr_qtdHoras作为thr_qtdH2_13_0_,trasladoho0_.thr_TransladosID作为thr_Tran3_13_0_。 休眠:从tbltranshora trasladoho0_ID中选择trasladoho0_.TranshoraID作为Transhor1_13_0_,选择trasladoho0_.thr_qtdHoras作为thr_qtdH2_13_0_,trasladoho0_.thr_TransladosID作为thr_Tran3_13_0_。 休眠:从tbltranshora trasladoho0_ID中选择trasladoho0_.TranshoraID作为Transhor1_13_0_,选择trasladoho0_.thr_qtdHoras作为thr_qtdH2_13_0_,trasladoho0_.thr_TransladosID作为thr_Tran3_13_0_。 最佳答案 您正面临选择n + 1问题。您获得的第一个查询将检索您想要的列表,但是为了实例化实体Traslado的对象,Hibernate为每个对象调用一个select语句以查找它是否具有关联的TrasladoHora,因为该关系映射在的表(我的意思是TrasladoHora是此双向关联的所有者)。Here is a answer被很多人评论并提出了建议,但是Hibernate文档的Tuning fetch strategies部分中提到了该问题和一些解决方法。编辑:I also respond another question与此问题有关,也许您在那里找到更清晰的解释。 09-25 22:17