[hibernate-issues] [Hibernate-JIRA] Resolved: (HHH-1529) session.merge(obj) with an uneffected 1:1 relationship throws an exception

Emmanuel Bernard (JIRA) noreply at atlassian.com
Mon Oct 16 08:56:25 EDT 2006


     [ http://opensource.atlassian.com/projects/hibernate/browse/HHH-1529?page=all ]
     
Emmanuel Bernard resolved HHH-1529:
-----------------------------------

    Resolution: Duplicate

HHH-2138

> session.merge(obj) with an uneffected 1:1 relationship throws an exception
> --------------------------------------------------------------------------
>
>          Key: HHH-1529
>          URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-1529
>      Project: Hibernate3
>         Type: Bug

>   Components: core
>     Versions: 3.1.2
>  Environment: Windows XP, Hibernate 3.1.2, JDK 5.0_06, PostgreSQL 8.1.2 (Oracle 10g XE beta3 as alternative)
>     Reporter: Juergen Zimmermann
>  Attachments: use-case-merge.zip
>
>
> Session.merge() crashes with util.JDBCExceptionReporter both on Oracle 10g XE and PostgreSQL 8.1.2. There is no problem when using the Session API and the according update() method. The use case is basically as follows (sources and 3rd party JARs are attached):
> Session session = sf.openSession(); 
> Transaction trans = session.getTransaction(); 
> CustomerEntity customer = session.find(CustomerEntity.class, 1L); 
> trans.commit(); 
> session.close(); 
> customer.setName("Newvalue"); 
> session = sf.openSession(); 
> trans = session.getTransaction();
> session.merge(customer);                   // <== crash
> trans.commit(); 
> session.close(); 
> The "customer" object has a 1:1 relationship to an object of class SalesRepEntity. In the log file there is util.JDBCExceptionReporter. The problem is gone if I invoke session.refresh(customer.getSalesRep()) before invoking session.merge(customer). Also the problem is gone if I invoke session.update(customer) instead of session.merge(customer).
> Now the two stack traces (on a German Windows operating system). 
> Stacktrace Oracle 10g XE:
>  
>  org.hibernate.exception.GenericJDBCException: could not load an entity: [de.crm.SalesRepEntity#id=1, name=Alpha]
> 	at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:91)
> 	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:79)
> 	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
> 	at org.hibernate.loader.Loader.loadEntity(Loader.java:1799)
> 	at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:93)
> 	at org.hibernate.loader.entity.EntityLoader.loadByUniqueKey(EntityLoader.java:85)
> 	at org.hibernate.persister.entity.AbstractEntityPersister.loadByUniqueKey(AbstractEntityPersister.java:1522)
> 	at org.hibernate.type.EntityType.loadByUniqueKey(EntityType.java:365)
> 	at org.hibernate.type.EntityType.resolve(EntityType.java:306)
> 	at org.hibernate.type.EntityType.replace(EntityType.java:207)
> 	at org.hibernate.type.TypeFactory.replace(TypeFactory.java:431)
> 	at org.hibernate.event.def.DefaultMergeEventListener.copyValues(DefaultMergeEventListener.java:281)
> 	at org.hibernate.event.def.DefaultMergeEventListener.entityIsDetached(DefaultMergeEventListener.java:247)
> 	at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:100)
> 	at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:52)
> 	at org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:701)
> 	at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:685)
> 	at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:689)
> 	at de.crm.Crm.updateCustomer(Crm.java:72)
> 	at de.crm.Crm.main(Crm.java:32)
> Caused by: java.sql.SQLException: Fehlender IN- oder OUT-Parameter auf Index:: 1
> 	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
> 	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
> 	at oracle.jdbc.driver.OraclePreparedStatement.processCompletedBindRow(OraclePreparedStatement.java:1681)
> 	at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3280)
> 	at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3329)
> 	at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:139)
> 	at org.hibernate.loader.Loader.getResultSet(Loader.java:1669)
> 	at org.hibernate.loader.Loader.doQuery(Loader.java:662)
> 	at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
> 	at org.hibernate.loader.Loader.loadEntity(Loader.java:1785)
> 	... 16 more
> 	
> Stacktrace PostgreSQL 8.1.2:
> org.hibernate.exception.DataException: could not load an entity: [de.crm.SalesRepEntity#id=1, name=Alpha]
> 	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:75)
> 	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
> 	at org.hibernate.loader.Loader.loadEntity(Loader.java:1799)
> 	at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:93)
> 	at org.hibernate.loader.entity.EntityLoader.loadByUniqueKey(EntityLoader.java:85)
> 	at org.hibernate.persister.entity.AbstractEntityPersister.loadByUniqueKey(AbstractEntityPersister.java:1522)
> 	at org.hibernate.type.EntityType.loadByUniqueKey(EntityType.java:365)
> 	at org.hibernate.type.EntityType.resolve(EntityType.java:306)
> 	at org.hibernate.type.EntityType.replace(EntityType.java:207)
> 	at org.hibernate.type.TypeFactory.replace(TypeFactory.java:431)
> 	at org.hibernate.event.def.DefaultMergeEventListener.copyValues(DefaultMergeEventListener.java:281)
> 	at org.hibernate.event.def.DefaultMergeEventListener.entityIsDetached(DefaultMergeEventListener.java:247)
> 	at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:100)
> 	at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:52)
> 	at org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:701)
> 	at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:685)
> 	at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:689)
> 	at de.crm.Crm.updateCustomer(Crm.java:72)
> 	at de.crm.Crm.main(Crm.java:32)
> Caused by: org.postgresql.util.PSQLException: Für den Parameter 1 wurde kein Wert angegeben.
> 	at org.postgresql.core.v3.SimpleParameterList.checkAllParametersSet(SimpleParameterList.java:134)
> 	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:179)
> 	at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:437)
> 	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:353)
> 	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:257)
> 	at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:139)
> 	at org.hibernate.loader.Loader.getResultSet(Loader.java:1669)
> 	at org.hibernate.loader.Loader.doQuery(Loader.java:662)
> 	at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
> 	at org.hibernate.loader.Loader.loadEntity(Loader.java:1785)

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira





More information about the hibernate-issues mailing list