1

我的情况很奇怪。在我尝试通过一次 HQL 查询来获取多个集合之前,我没有遇到此错误。网上说这个问题可能是因为 FetchType.LAZY,但我删除了它,没有任何改变。

我试图从中获取一些数据的实体:

@Entity
@Table(name="INSTITUTION_IN_FORM")
public class InstitutionInForm implements Serializable {


    private static final long serialVersionUID = -721358037476057890L;


    private int institutionId;

        @Id
        @GeneratedValue(strategy= IDENTITY)
        @Column(name="INSTITUTION_ID")
        public int getInstitutionId() {
            return institutionId;
        }
        public void setInstitutionId(int institutionId) {
            this.institutionId = institutionId;
        }


    private int version;

        @Version
        @Column(name="VERSION")
        public int getVersion() {
            return version;
        }
        public void setVersion(int version) {
            this.version = version;
        }


    private String nameOfInstitution;

        @Column(name="INSTITUTION_NAME")
        public String getNameOfInstitution() {
            return nameOfInstitution;
        }
        public void setNameOfInstitution(String nameOfInstitution) {
            this.nameOfInstitution = nameOfInstitution;
        }       


    private List<FormDate> formDateList = new ArrayList<FormDate>();

        @ManyToMany(mappedBy="institutions")
        @Cascade(CascadeType.ALL)
        public List<FormDate> getFormDateList() {
            return formDateList;
        }
        public void setFormDateList(List<FormDate> formDateList) {
            this.formDateList = formDateList;
        }


    private List<FormDescription> formDescriptionList = new ArrayList<FormDescription>();

        @OneToMany(mappedBy="institutions", orphanRemoval=true)
        @Cascade(CascadeType.ALL)
        public List<FormDescription> getFormDescriptionList() {
            return formDescriptionList;
        }
        public void setFormDescriptionList(List<FormDescription> formDescriptionList) {
            this.formDescriptionList = formDescriptionList;
        }
}

我用来在 DB 中查找数据的 dao 方法:

@SuppressWarnings("unchecked")
@Override
public List<InstitutionInForm> fetchByName(String institutionName) {        
    return sessionFactory.getCurrentSession().createQuery("select distinct institution from InstitutionInForm institution " +
                                                "left join fetch institution.formDateList formDate left join fetch institution.formDescriptionList formDescription where institution.nameOfInstitution= :institutionName")
                                                                                                    .setParameter("institutionName", institutionName).list();
}

我的错误堆栈跟踪:

Exception in thread "main" org.hibernate.loader.MultipleBagFetchException: cannot simultaneously fetch multiple bags
    at org.hibernate.loader.BasicLoader.postInstantiate(BasicLoader.java:93)
    at org.hibernate.loader.hql.QueryLoader.<init>(QueryLoader.java:121)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:204)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136)
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:105)
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:80)
    at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:168)
    at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:221)
    at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:199)
    at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1778)
    at edu.demidov.dao.EducationWebDaoImpl.fetchByName(EducationWebDaoImpl.java:67)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
    at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:96)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:260)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:94)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
    at $Proxy24.fetchByName(Unknown Source)
    at edu.demidov.dao.AppOut.main(AppOut.java:52)

它可能有什么问题。任何帮助将不胜感激。感谢你们。

4

0 回答 0