问题描述
我在查询所有班级中的所有学生的时候出现了Hibernate的n+1问题,其中已经配置了@Fetch(FetchMode.JOIN),但不知道为什么还是出现了n+1问题。entity代码如下Classes:@Entity@Table(name="classes")publicclassClasses{privateintid;privateStringname;privateSet<Person>persons=newHashSet<Person>(0);@IdpublicintgetId(){returnid;}publicvoidsetId(intid){this.id=id;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}@OneToMany(fetch=FetchType.LAZY,mappedBy="classes")@Fetch(FetchMode.JOIN)publicSet<Person>getPersons(){returnpersons;}publicvoidsetPersons(Set<Person>persons){this.persons=persons;}}Person:@Entity@Table(name="person")@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)publicclassPerson{privateintid;privateStringname;privateintage;privateintversion;privateStringpath;privateClassesclasses;@IdpublicintgetId(){returnid;}publicvoidsetId(intid){this.id=id;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicintgetAge(){returnage;}publicvoidsetAge(intage){this.age=age;}@VersionpublicintgetVersion(){returnversion;}publicvoidsetVersion(intversion){this.version=version;}publicStringgetPath(){returnpath;}publicvoidsetPath(Stringpath){this.path=path;}@ManyToOne(fetch=FetchType.LAZY)@JoinColumn(name="classId")publicClassesgetClasses(){returnclasses;}publicvoidsetClasses(Classesclasses){this.classes=classes;}}查询代码如下List<Classes>clist=session.createQuery("fromClassesc").list();for(Classesc:clist){for(Personperson:c.getPersons()){System.out.println(person.getName());}}请大神帮忙解决下。
解决方案
解决方案二:
去掉延迟加载的标注