Hibernate: 3.1.2
Hibernate Annotations: 3.1.beta8
Hibernate EntityManager: 3.1.beta6
EntityManager.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 as follows:
EntityManager em = emf.createEntityManager();
EntityTransaction trans = em.getTransaction();
trans.begin();
PrivatkundeEntity p = em.find(PrivatkundeEntity.class, 1L);
trans.commit();
em.close();
p.setLastname("Newvalue");
em = emf.createEntityManager();
trans = em.getTransaction();
trans.begin();
em.merge(p);
trans.commit();
em.close();
The detached object has a 1:1 relationship to an object of class BetreuerEntity. If there is no Betreuer record in the database there is no problem. If there is a record util.JDBCExceptionReporter appears in the log file.
Now the two stack traces (on a German Windows operating system).
Oracle:
Exception in thread "main" WARN util.JDBCExceptionReporter - SQL Error: 17041, SQLState: null
ERROR util.JDBCExceptionReporter - Fehlender IN- oder OUT-Parameter auf Index:: 1
org.hibernate.exception.GenericJDBCException: could not load an entity: [de.hska.kundenverwaltung.db.BetreuerEntity#{id=1, version=0, nachname=Alpha, vorname=Adrian, nr=AlAd-001, seit=31.01.2001, anzJahre=5, familienstand=verheiratet}]
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 org.hibernate.ejb.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:138)
at de.hska.kundenverwaltung.db.KundenverwaltungDAO.updateKunden(KundenverwaltungDAO.java:129)
at de.hska.kundenverwaltung.Kundenverwaltung.editKunden(Kundenverwaltung.java:160)
at de.hska.main.Hska.neuerNachnameFuerKunde(Hska.java:254)
at de.hska.main.Hska.doCmd(Hska.java:123)
at de.hska.main.Hska.main(Hska.java:53)
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)
... 20 more
PostgreSQL:
WARN util.JDBCExceptionReporter - SQL Error: 0, SQLState: 22023
ERROR util.JDBCExceptionReporter - Für den Parameter 1 wurde kein Wert angegeben.
org.hibernate.exception.DataException: could not load an entity: [de.hska.kundenverwaltung.db.BetreuerEntity#{id=1, version=0, nachname=Alpha, vorname=Adrian, nr=AlAd-001, seit=31.01.2001, anzJahre=5, familienstand=verheiratet}]
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 org.hibernate.ejb.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:138)
at de.hska.kundenverwaltung.db.KundenverwaltungDAO.updateKunden(KundenverwaltungDAO.java:129)
at de.hska.kundenverwaltung.Kundenverwaltung.editKunden(Kundenverwaltung.java:160)
at de.hska.main.Hska.neuerNachnameFuerKunde(Hska.java:254)
at de.hska.main.Hska.doCmd(Hska.java:123)
at de.hska.main.Hska.main(Hska.java:53)
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)
... 20 more
|