嗨,我一直得到這個錯誤在我的Struts2 Hibernate應用程序。下面是此錯誤無法實例收集留存
SEVERE: Could not instantiate collection persister org.hibernate.persister.collection.BasicCollectionPersister
org.hibernate.MappingException: Could not instantiate collection persister org.hibernate.persister.collection.BasicCollectionPersister
at org.hibernate.persister.internal.PersisterFactoryImpl.create(PersisterFactoryImpl.java:242)
at org.hibernate.persister.internal.PersisterFactoryImpl.createCollectionPersister(PersisterFactoryImpl.java:201)
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:430)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1859)
at projectBroomKetuActionDataItrfc.dto.HibernateUtility.getSessionFactory(HibernateUtility.java:19)
at projectBroomKetuActionDataItrfc.dto.DatabaseInteractionInterface.checkDataDuplication(DatabaseInteractionInterface.java:60)
at projectBroomKetuAction.SignUpActionClass.validate(SignUpActionClass.java:462)
at com.opensymphony.xwork2.validator.ValidationInterceptor.doBeforeInvocation(ValidationInterceptor.java:251)
at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:263)
at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:76)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:229)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:229)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:191)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:73)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
at org.apache.struts2.interceptor.DateTextFieldInterceptor.intercept(DateTextFieldInterceptor.java:125)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:91)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:253)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:139)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:193)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:189)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)
at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:564)
at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:81)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:409)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1044)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ArrayIndexOutOfBoundsException: 0
at org.hibernate.persister.collection.AbstractCollectionPersister.generateSelectSizeString(AbstractCollectionPersister.java:1020)
at org.hibernate.persister.collection.AbstractCollectionPersister.<init>(AbstractCollectionPersister.java:528)
at org.hibernate.persister.collection.BasicCollectionPersister.<init>(BasicCollectionPersister.java:77)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at org.hibernate.persister.internal.PersisterFactoryImpl.create(PersisterFactoryImpl.java:231)
... 66 more
下面的堆棧跟蹤hibernat.cfg.xml
<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- Database connection settings -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://127.0.0.1:3306/b#%^^DB</property>
<property name="connection.username">****</property>
<property name="connection.password">******</property>
<!-- JDBC connection pool (use the built-in) -->
<!--
<property name="connection.pool_size">10</property> --> <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property> <property name="hibernate.c3p0.min_size">1</property>
<property name="hibernate.c3p0.max_size">15</property>
<property name="hibernate.c3p0.timeout">300</property>
<property name="hibernate.c3p0.max_statements">50</property>
<property name="hibernate.c3p0.idle_test_period">30</property>
<!-- Connection testing settings -->
<property name="hibernate.c3p0.validate">false</property>
<property name="hibernate.c3p0.automaticTestTable">conTestTable</property>
<!--
<property name="hibernate.c3p0.timeout">600</property>
<property name="hibernate.c3p0.maxIdleTimeExcessConnections">20</property> -->
<!-- Connection testing settings -->
<!--
<property name="hibernate.c3p0.validate">false</property>
<property name="hibernate.c3p0.idle_test_period">30</property>
<property name="hibernate.c3p0.automaticTestTable">conTestTable</property>
-->
<!-- SQL dialect -->
<property name="dialect">projectBroomKetuDataClass.dto.ImprovedMySQLDialect</property>
<!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<!-- Drop and re-create the database schema on startup --> <property name="hbm2ddl.auto">update</property> <mapping class="projectBroomKetuDataClass.dto.HouseHoldDetails"/> <mapping class="projectBroomKetuDataClass.dto.MaidsDetails"/> <mapping class="projectBroomKetuDataClass.dto.HouseHoldServiceReqMap"/> <mapping class="projectBroomKetuDataClass.dto.MaidWeekTimeMap"/> <mapping class="projectBroomKetuDataClass.dto.VerificationToken"/> <mapping class="projectBroomKetuDataClass.dto.Services"/> <mapping class="projectBroomKetuDataClass.dto.ServicesOffered"/>
<mapping class="staff.CoordinatorDataClass.dto.CoordinatorDetails"/> <mapping class="resource.dataClasses.dto.HouseKeeperDetails"/> <mapping class="resource.dataClasses.dto.ElederCareTakerDetails"/> <mapping class="resource.dataClasses.dto.DriverDetails"/> <mapping class="resource.dataClasses.dto.CookDetails"/> <mapping class="resource.dataClasses.dto.BabySitterDetails"/>
<mapping class="services.dataClass.dto.BabySittingService"/> <mapping class="services.dataClass.dto.CookingService"/> <mapping class="services.dataClass.dto.DriverService"/> <mapping class="services.dataClass.dto.ElderlyCareService"/> <mapping class="services.dataClass.dto.HouseKeepingService"/>
</session-factory>
</hibernate-configuration>
下面是我的HibernateUtil類的代碼片段
public static final SessionFactory getSessionFactory() {
if(null == sessionFactory)
{
//try{
Configuration configuration = new Configuration();
configuration.configure();
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(
configuration.getProperties()).build();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
//}
// catch(HibernateException ex){
// System.err.println("Initial SessionFactory creation failed." + ex);
// return null;
// }
}
return sessionFactory;
}
}
請誰能幫助我有了這個。我試圖找出爲什麼我收到一個
java.lang.ArrayIndexOutOfBoundsException:0在 org.hibernate.persister.collection.AbstractCollectionPersister.generateSelectSizeString
但猜不出什麼。
編輯:
我再次看着異常的來源,正是這種代碼段。
protected String generateSelectSizeString(boolean isIntegerIndexed) {
String selectValue = isIntegerIndexed ?
"max(" + getIndexColumnNames()[0] + ") + 1" : // lists, arrays
"count(" + getElementColumnNames()[0] + ")"; // sets, maps, bags
return new SimpleSelect(dialect)
.setTableName(getTableName())
.addCondition(getKeyColumnNames(), "=?")
.addColumn(selectValue)
.toStatementString();
}
現在
從那裏功能generateSelectSizeString(boolean isIntegerIndexed)
被稱爲一點就是
sqlSelectSizeString = generateSelectSizeString(collection.isIndexed() && !collection.isMap());
這裏isIndexed和ISMAP都始終返回false。所以回到方法認定中
保護字符串generateSelectSizeString(布爾isIntegerIndexed)
isIntegerIndexed =假
因此陣列出結合的例外的是在這條線發生
String selectValue = "count(" + getElementColumnNames()[0] + ")";
再次 getElementColumnNames ()返回一個最終保護字符串數組elementColumnNames。 這是在該行
int elementSpan = collection.getElement().getColumnSpan();
elementColumnNames = new String[elementSpan];
我無法看到getColumnSpan()如何工作獲分配的內存從 org.hibernate.persister.collection.AbstractCollectionPersister
在構造函數中,但它絕對是返回0這就是爲什麼當我們訪問elementColumnNames [0]時,我們得到一個數組越界的異常。 有誰知道getColumnSpan()是如何工作的?我又檢查了我的代碼,我不認爲有尚未採取