[
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....
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira