Hibernate / JPA无法进行急切加载

时间:2013-05-03 16:04:34

标签: hibernate eager

使用Spring MVC,Hibernate和JPA。 我试图从Controller加载一些Collection并运行到LazyLoading Exception。 所以我想切换到Egar加载。

我有两个班级(Flightroute和Measurstations,它们处于多对多的现实中)

@Entity
@Table(name = "flightroutes")
public class Flightroute extends DomainObject<Integer> {

    @ManyToMany(fetch=FetchType.EAGER)
    private List<MeasureStation> measureStation;

@Entity
@Table(name = "measurestations")
public class MeasureStation extends DomainObject<Long> {
    @ManyToMany(mappedBy = "measureStation")
    private List<Flightroute> flightroutes;

但这似乎不起作用,当应用程序启动时遇到以下异常

  

Mai 03,2013 5:58:08 PM org.apache.catalina.core.StandardContext listenerStart   SEVERE:将上下文初始化事件发送到类org.springframework.web.context.ContextLoaderListener的侦听器实例的异常   org.springframework.beans.factory.BeanCreationException:使用名称&#39; entityManagerFactory&#39;创建bean时出错。在ServletContext资源[/WEB-INF/applicationContext.xml]中定义:init方法的调用失败;嵌套异常是javax.persistence.PersistenceException:[PersistenceUnit:atm]无法构建EntityManagerFactory       在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1488)       在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524)       在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461)       at org.springframework.beans.factory.support.AbstractBeanFactory $ 1.getObject(AbstractBeanFactory.java:295)       在org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)       在org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)       在org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)       在org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1117)       在org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:922)       在org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)       at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:389)       在org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:294)       在org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112)       在org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4791)       at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5285)       在org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)       在org.apache.catalina.core.ContainerBase $ StartChild.call(ContainerBase.java:1559)       在org.apache.catalina.core.ContainerBase $ StartChild.call(ContainerBase.java:1549)       at java.util.concurrent.FutureTask $ Sync.innerRun(Unknown Source)       at java.util.concurrent.FutureTask.run(Unknown Source)       at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)       at java.util.concurrent.ThreadPoolExecutor $ Worker.run(Unknown Source)       在java.lang.Thread.run(未知来源)   引起:javax.persistence.PersistenceException:[PersistenceUnit:atm]无法构建EntityManagerFactory       在org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:930)       在org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:904)       在org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:92)       在org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:288)       在org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:310)       在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547)       在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485)       ......还有22个   引起:org.hibernate.loader.MultipleBagFetchException:无法同时获取多个包       在org.hibernate.loader.BasicLoader.postInstantiate(BasicLoader.java:93)       在org.hibernate.loader.entity.EntityLoader。(EntityLoader.java:118)       在org.hibernate.loader.entity.EntityLoader。(EntityLoader.java:70)       在org.hibernate.loader.entity.EntityLoader。(EntityLoader.java:53)       在org.hibernate.loader.entity.BatchingEntityLoaderBuilder.buildLoader(BatchingEntityLoaderBuilder.java:75)       在org.hibernate.persister.entity.AbstractEntityPersister.createEntityLoader(AbstractEntityPersister.java:2483)       在org.hibernate.persister.entity.AbstractEntityPersister.createEntityLoader(AbstractEntityPersister.java:2496)       在org.hibernate.persister.entity.AbstractEntityPersister.createLoaders(AbstractEntityPersister.java:3832)       在org.hibernate.persister.entity.AbstractEntityPersister.postInstantiate(AbstractEntityPersister.java:3818)       在org.hibernate.persister.entity.SingleTableEntityPersister.postInstantiate(SingleTableEntityPersister.java:1018)       在org.hibernate.internal.SessionFactoryImpl。(SessionFactoryImpl.java:461)       在org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1750)       在org.hibernate.ejb.EntityManagerFactoryImpl。(EntityManagerFactoryImpl.java:94)       在org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:920)       ......还有28个

我没有得到它,任何人都可以帮助我,和/或解释为什么会发生这种情况?

1 个答案:

答案 0 :(得分:2)

发现:

 @ManyToMany(fetch=FetchType.EAGER)
    private List<MeasureStation> measureStation;

如果有两个列表,hibernate想要保持列表中元素的排序(带连接等),hibernate不能保持顺序。

拥有look