2013-05-03 82 views
2

使用Spring MVC,Hibernate和JPA。 我試圖從控制器加載一些集合,並運行到LazyLoading異常。 所以我想切換到Egar加載。Hibernate/JPA無法做到急切加載

我有兩個類(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:Exc eption將上下文初始化事件發送到類的監聽器實例org.springframework.web.context.ContextLoaderListener org.springframework.beans.factory.BeanCreationException:在ServletContext資源[/ WEB-INF/applicationContext中定義名稱'entityManagerFactory' xml]:調用init方法失敗;嵌套異常是javax.persistence.PersistenceException:[PersistenceUnit:atm]無法在org.springframework.beans.factory的org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1488) 上構建EntityManagerFactory 。 support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) 在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) 在org.springframework.beans.factory.support.AbstractBeanFactory $ 1.getObject在org.springframework.beans.facto(AbstractBeanFactory.java:295) 在org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) ry.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) 的組織。 springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:389) at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:294) at org.springframework.w eb.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4791) at org.apache.catalina.core.StandardContext.startInternal(StandardContext。 java:5285) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase $ StartChild.call(ContainerBase.java:1559) at 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.concurren t.ThreadPoolExecutor $ Worker.run(未知源) at java.lang.Thread.run(Unknown Source) 由javax.persistence引起。的PersistenceException:[PersistenceUnit:大氣壓]無法在org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:930)來構建的EntityManagerFactory 在org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:904) 在有機.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) at 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) at org.hibernate.loader.entity.EntityLoader。(EntityLoader.java:118) at 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.createEntityL oader(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多個

我不明白這一點,任何人都可以HEL我,和/或解釋爲什麼這個happend?

回答

1

發現:

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

休眠要保持元素的順序列表中,(與連接等),如果有兩個列表,休眠不能跟上排序。

有一個look

+0

謝謝你的見解! 看起來好像只有一個List被使用時也會出現這個錯誤。 然而,通過使用'@IndexColumn(name =「INDEX_COL」)''就可以輕鬆解決問題,如鏈接到的文章中所建議的。 – Michael 2014-11-04 15:07:37