I have a problem using hibernate.:
I have 5 classes X1-X5 like these :
X1 : some fields
X2 : some fields
X3 : some fields
X4 : some fields
(foreign key to class X1) FK_X1
FK_X2 (foreign key to class X2)
FK_X3 (foreign key to class X3)
X5 :some fields
FK_X1 (foreign key to class X1)
FK_X4 (foreign key to class X4)
and the mappings for these classes are as follows :
mapping for X4 :
<many-to-one name="X1" Class="X1">
Column name ="FK_X1">>
</many-to-one>
<many-to-one name="X2" Class = "X2">
<Column name ="FK_X2">
</many-to-one>
<many-to-one name="X3" Class = "X3">
<Column name ="FK_X3">
</many-to-one>
mapping for X5 :
< <many-to-one name="X1" Class = "X1"
<Column name ="FK_X1" >
</many-to-one>
<<many-to-one name="X4" Class = "X4"
Column name ="FK_X4">>
</many-to-one>
When I want to load instances of X5 without any relation to X4 ( by removing many-to-one relation to X4 from mapping), everything is OK with just the return value from X5.getX4() is null as is supposed to be!
But when I try to load X5 instances with relation to X4 inserted, I will hit to the following exceptions :
****************************************************************************
INFO: processing foreign key constraints
May 1, 2006 5:17:20 PM net.sf.hibernate.dialect.Dialect <init>
INFO: Using dialect: net.sf.hibernate.dialect.Oracle9Dialect
May 1, 2006 5:17:20 PM net.sf.hibernate.cfg.SettingsFactory buildSettings
INFO: Use outer join fetching: true
May 1, 2006 5:17:20 PM net.sf.hibernate.connection.DriverManagerConnectionProvider configure
INFO: Using Hibernate built-in connection pool (not for production use!)
May 1, 2006 5:17:20 PM net.sf.hibernate.connection.DriverManagerConnectionProvider configure
INFO: Hibernate connection pool size: 3
May 1, 2006 5:17:20 PM net.sf.hibernate.connection.DriverManagerConnectionProvider configure
INFO: using driver: oracle.jdbc.driver.OracleDriver at URL: jdbc:oracle:thin:@192.168.1.150:1521:testdb
May 1, 2006 5:17:20 PM net.sf.hibernate.connection.DriverManagerConnectionProvider configure
INFO: connection properties: {user=test1, password=test1}
May 1, 2006 5:17:20 PM net.sf.hibernate.transaction.TransactionManagerLookupFactory getTransactionManagerLookup
INFO: No TransactionManagerLookup configured (in JTA environment, use of process level read-write cache is not recommended)
May 1, 2006 5:17:21 PM net.sf.hibernate.cfg.SettingsFactory buildSettings
INFO: Use scrollable result sets: true
May 1, 2006 5:17:21 PM net.sf.hibernate.cfg.SettingsFactory buildSettings
INFO: Use JDBC3 getGeneratedKeys(): false
May 1, 2006 5:17:21 PM net.sf.hibernate.cfg.SettingsFactory buildSettings
INFO: Optimize cache for minimal puts: false
May 1, 2006 5:17:21 PM net.sf.hibernate.cfg.SettingsFactory buildSettings
INFO: Query language substitutions: {}
May 1, 2006 5:17:21 PM net.sf.hibernate.cfg.SettingsFactory buildSettings
INFO: cache provider: net.sf.hibernate.cache.EhCacheProvider
May 1, 2006 5:17:21 PM net.sf.hibernate.cfg.Configuration configureCaches
INFO: instantiating and configuring caches
May 1, 2006 5:17:21 PM net.sf.ehcache.config.Configurator configure
WARNING: No configuration found. Configuring ehcache from ehcache-failsafe.xml found in the classpath: jar:file:ehcache-1.1.jar!/ehcache-failsafe.xml
May 1, 2006 5:17:21 PM net.sf.hibernate.impl.SessionFactoryImpl <init>
INFO: building session factory
May 1, 2006 5:17:22 PM net.sf.hibernate.impl.SessionFactoryObjectFactory addInstance
INFO: Not binding factory to JNDI, no JNDI name configured
May 1, 2006 5:17:31 PM net.sf.hibernate.util.JDBCExceptionReporter logExceptions
WARNING: SQL Error: 17027, SQLState: null
May 1, 2006 5:17:31 PM net.sf.hibernate.util.JDBCExceptionReporter logExceptions
SEVERE: Stream has already been closed
May 1, 2006 5:17:31 PM net.sf.hibernate.util.JDBCExceptionReporter logExceptions
WARNING: SQL Error: 17027, SQLState: null
May 1, 2006 5:17:31 PM net.sf.hibernate.util.JDBCExceptionReporter logExceptions
SEVERE: Stream has already been closed
net.sf.hibernate.exception.GenericJDBCException: could not load: [X4#6]
at net.sf.hibernate.exception.ErrorCodeConverter.handledNonSpecificException(ErrorCodeConverter.java:90)
at net.sf.hibernate.exception.ErrorCodeConverter.convert(ErrorCodeConverter.java:79)
at net.sf.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:29)
at net.sf.hibernate.persister.AbstractEntityPersister.convert(AbstractEntityPersister.java:1331)
at net.sf.hibernate.persister.EntityPersister.load(EntityPersister.java:416)
at net.sf.hibernate.impl.SessionImpl.doLoad(SessionImpl.java:2131)
at net.sf.hibernate.impl.SessionImpl.doLoadByClass(SessionImpl.java:2001)
at net.sf.hibernate.impl.SessionImpl.internalLoad(SessionImpl.java:1963)
at net.sf.hibernate.type.ManyToOneType.resolveIdentifier(ManyToOneType.java:69)
at net.sf.hibernate.type.EntityType.resolveIdentifier(EntityType.java:208)
at net.sf.hibernate.impl.SessionImpl.initializeEntity(SessionImpl.java:2219)
at net.sf.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:319)
at net.sf.hibernate.loader.Loader.doQuery(Loader.java:309)
at net.sf.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:138)
at net.sf.hibernate.loader.Loader.doList(Loader.java:1063)
at net.sf.hibernate.loader.Loader.list(Loader.java:1054)
at net.sf.hibernate.hql.QueryTranslator.list(QueryTranslator.java:854)
at net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:1554)
at net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:1531)
at net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:1523)
at com.adventnet.nms.startnms.ModuleDispatcher.run(ModuleDispatcher.java:73)
at com.adventnet.management.scheduler.WorkerThread.run(WorkerThread.java:68)
Caused by: java.sql.SQLException: Stream has already been closed
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:114)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:156)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:219)
at oracle.jdbc.driver.OracleStatement.getBytesInternal(OracleStatement.java:2365)
at oracle.jdbc.driver.OracleStatement.getStringValue(OracleStatement.java:2438)
at oracle.jdbc.driver.OracleResultSetImpl.getString(OracleResultSetImpl.java:285)
at oracle.jdbc.driver.OracleResultSet.getString(OracleResultSet.java:1308)
at net.sf.hibernate.type.StringType.get(StringType.java:18)
at net.sf.hibernate.type.NullableType.nullSafeGet(NullableType.java:62)
at net.sf.hibernate.type.NullableType.nullSafeGet(NullableType.java:53)
at net.sf.hibernate.type.AbstractType.hydrate(AbstractType.java:67)
at net.sf.hibernate.loader.Loader.hydrate(Loader.java:690)
at net.sf.hibernate.loader.Loader.loadFromResultSet(Loader.java:631)
at net.sf.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:590)
at net.sf.hibernate.loader.Loader.getRow(Loader.java:505)
at net.sf.hibernate.loader.Loader.getRowFromResultSet(Loader.java:218)
at net.sf.hibernate.loader.Loader.doQuery(Loader.java:285)
at net.sf.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:138)
at net.sf.hibernate.loader.Loader.loadEntity(Loader.java:941)
at net.sf.hibernate.loader.Loader.loadEntity(Loader.java:961)
at net.sf.hibernate.loader.EntityLoader.load(EntityLoader.java:59)
at net.sf.hibernate.loader.EntityLoader.load(EntityLoader.java:51)
at net.sf.hibernate.persister.EntityPersister.load(EntityPersister.java:413)
... 22 more