Win a copy of JDBC Workbook this week in the JDBC and Relational Databases forum
or A Day in Code in the A Day in Code forum!
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other all forums
this forum made possible by our volunteer staff, including ...
  • Campbell Ritchie
  • Paul Clapham
  • Jeanne Boyarsky
  • Junilu Lacar
  • Henry Wong
  • Ron McLeod
  • Devaka Cooray
  • Tim Cooke
Saloon Keepers:
  • Tim Moores
  • Stephan van Hulst
  • Frits Walraven
  • Tim Holloway
  • Carey Brown
  • Piet Souris
  • salvin francis
  • fred rosenberger

could not initialize a collection:

Posts: 2
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi people a need a help, if someone give me a solution I will be very gratfull.
Using a Hibernate Tutorial I tried steps getting success, but when started
the step #16 []
that means: "Finding by primary key" I was very disapointed because I spent long days and
still does not work.
I tried "Using Native SQL" and too "Using Criteria Queries" and same error message appear.
My connection works fine (I think) with SQLServer.
My configurations and other information are in the next lines.
If more informations are requested I can send with pleasure.

Please help me someone!

Juan Fernandes.

/////////////////////////////// My hibernate.cfg.xml - it does works fine //////////////////////////////////////

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN" "">;
<property name="connection.url">jdbc dbc sn_2</property >
<!--property name="connection.url">jdbc:jtds:sqlserver://localhost/CEP_BD</property-->
<property name="connection.driver_class">sun.jdbc.odbc.JdbcOdbcDriver</property>
<property name="connection.username">Adm</property>
<property name="connection.password">123456</property>
<!-- Set AutoCommit to true -->
<property name="connection.autocommit">true</property>
<!-- SQL Dialect to use. Dialects are database specific -->
<property name="dialect">org.hibernate.dialect.SQLServerDialect</property>
<!-- Mapping files -->
<mapping resource="com/visualbuilder/hibernate/User.hbm.xml" />
<mapping resource="com/visualbuilder/hibernate/PhoneNumber.hbm.xml" />

///////////////////////////////////the generated tables in MSSQLServer/////////////////////////

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_PHONE_NUMBERS_USERS]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[PHONE_NUMBERS]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[PHONE_NUMBERS]

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[USERS]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[USERS]

[USER_ID] [numeric](22, 0) NOT NULL ,
[NUMBER_TYPE] [varchar] (50) COLLATE Latin1_General_CI_AS NOT NULL ,
[PHONE] [numeric](22, 0) NOT NULL

[USER_ID] [numeric](22, 0) NOT NULL ,
[FIRST_NAME] [varchar] (20) COLLATE Latin1_General_CI_AS NOT NULL ,
[LAST_NAME] [varchar] (20) COLLATE Latin1_General_CI_AS NOT NULL ,
[AGE] [numeric](22, 0) NOT NULL ,
[EMAIL] [varchar] (40) COLLATE Latin1_General_CI_AS NOT NULL

//////////////////////////////// the respectives User.hbm.xml the first////////////////////////////

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
""; >

<class name="com.visualbuilder.hibernate.User" table="USERS" >
<id name="userId" type="java.lang.Long" column="user_id" >
<generator class="increment" />
<property name="firstName" type="java.lang.String" column="first_name" length="20" />
<property name="lastName" type="java.lang.String" column="last_name" length="20" />
<property name="age" type="java.lang.Integer" column="age" length="-1" />
<property name="email" type="java.lang.String" column="email" length="40" />
<set name="phoneNumbers" cascade="all">
<key column="USER_ID"/>
<one-to-many class="com.visualbuilder.hibernate.PhoneNumber" />


//////////////////////////////// the second PhoneNumber.hbm.xml /////////////////////////

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
""; >

<class name="com.visualbuilder.hibernate.PhoneNumber" table="PHONE_NUMBERS" >
<key-property column="USER_ID" name="userId" type="java.lang.Long" />
<key-property column="NUMBER_TYPE" name="numberType" type="java.lang.String"/>

<property name="phone" type="java.lang.Long">
<column name="PHONE" precision="22" scale="0" />


//////////////////////////////////the method that generated exception/////////////////////////

public void testFindByPk(UserManager manager)
User user = manager.getUser(1);//Find the user with id=1
if(user == null) {
System.out.println("No user found with ID=1");
}else {
System.out.println("User found with ID=" + user.getUserId() + "\n" +
"\tName=" + user.getLastName() + "\n" +
"\tEmail=" + user.getEmail() +

java.util.Iterator numbers = user.getPhoneNumbers().iterator();
while(numbers.hasNext()) {
PhoneNumber ph = (PhoneNumber);
System.out.println("\t\tNumber Type:" + ph.getPhone() + "\n" +
"\t\tPhone Number:" + ph.getPhone());



//////////////////////// the resulted in my console //////////////////////

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
User found with ID=1
Exception in thread "main" org.hibernate.exception.GenericJDBCException: could not initialize a collection: [com.visualbuilder.hibernate.User.phoneNumbers#1]
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(
at org.hibernate.exception.SQLStateConverter.convert(
at org.hibernate.exception.JDBCExceptionHelper.convert(
at org.hibernate.loader.Loader.loadCollection(
at org.hibernate.loader.collection.CollectionLoader.initialize(
at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(
at org.hibernate.event.def.DefaultInitializeCollectionEventListener.onInitializeCollection(
at org.hibernate.impl.SessionImpl.initializeCollection(
at org.hibernate.collection.AbstractPersistentCollection.initialize(
at org.hibernate.collection.PersistentSet.iterator(
at com.visualbuilder.hibernate.client.TestClient.testFindByPk(
at com.visualbuilder.hibernate.client.TestClient.main(
Caused by: java.sql.SQLException: [Microsoft][ODBC SQL Server Driver]�ndice de descritor inv�lido
at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.SQLGetDataDouble(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcResultSet.getDataDouble(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcResultSet.getLong(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcResultSet.getLong(Unknown Source)
at org.hibernate.type.LongType.get(
at org.hibernate.type.NullableType.nullSafeGet(
at org.hibernate.type.NullableType.nullSafeGet(
at org.hibernate.persister.collection.AbstractCollectionPersister.readKey(
at org.hibernate.loader.Loader.readCollectionElement(
at org.hibernate.loader.Loader.readCollectionElements(
at org.hibernate.loader.Loader.getRowFromResultSet(
at org.hibernate.loader.Loader.doQuery(
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(
at org.hibernate.loader.Loader.loadCollection(
... 9 more
expectation is the root of all heartache - shakespeare. tiny ad:
Devious Experiments for a Truly Passive Greenhouse!
    Bookmark Topic Watch Topic
  • New Topic