Hiya,

After scouring the boards and the web, I couldn't find any reference
to help me out of a bind with a ManyToOne relation assignment in an
app I'm working on.  But, I did figure out the problem in the end, so
thought I'd document it here.

Some background:

I have two entity classes I'm concerned with at the moment: PartyRole
and PartyRelationship.  Each class has a ManyToOne relationship to a
different "type" class: PartyRoleType and PartyRelationshipType,
respectively.  The structure of each of these respective relationships
is identical.  There can be many PartyRole instances of any given
PartyRoleType.  The PartyRole knows about the PartyRoleType, but not
vice versa--so the relation is a unidirectional ManyToOne from
PartyRole to PartyRoleType.

The exact same relation holds for PartyRelationship and
PartyRelationshipType.  Many PartyRelationship instances can reference
the same PartyRelationshipType, but the PartyRelationshipType is not
aware of any of the instances that reference it.

The problem:

The mapping between PartyRole and PartyRoleType appears to work just
fine.  The exact same mapping between PartyRelationship and
PartyRelationshipType throws a PersistenceException.  It appears that
OpenJPA can't figure out what to do with the entity class.  I was
concerned about the name, thinking perhaps "PartyRelationshipType" was
messing up OpenJPA.  So, I changed the name.  This gave me the error
listed below.

Afer some more digging and head scratching, I realized that in the
error it was looking at the class as a ByteArrayInputStream, and that
made me realize that I had not listed the class in my persistence.xml
jar.

So, if you get "Unknown column in field list", go back and double
check your persistence.xml file.  Improving the error message for this
particular case might help people in the future.

Great product, OpenJPA--very very powerful.  I'm thoroughly enjoying
working with it.

Thanks,
--
Alexander R. Saint Croix






javax.ejb.EJBException: The bean encountered a non-application
exception.; nested exception is:
        <openjpa-1.0.1-r420667:592145 fatal general error>
org.apache.openjpa.persistence.PersistenceException: The transaction
has been rolled back.  See the nested exceptions for details on the
errors that occurred.
        
org.apache.openejb.core.ivm.BaseEjbProxyHandler.convertException(BaseEjbProxyHandler.java:366)
        
org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:323)
        
org.apache.openejb.util.proxy.Jdk13InvocationHandler.invoke(Jdk13InvocationHandler.java:49)
        $Proxy32.persist(Unknown Source)
        org.eremite.HelloServlet.doGet(HelloServlet.java:158)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

root cause

<openjpa-1.0.1-r420667:592145 fatal general error>
org.apache.openjpa.persistence.PersistenceException: The transaction
has been rolled back.  See the nested exceptions for details on the
errors that occurred.
        
org.apache.openjpa.kernel.BrokerImpl.newFlushException(BrokerImpl.java:2107)
        org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1954)
        org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:1852)
        org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1623)
        
org.apache.openjpa.kernel.DelegatingBroker.flush(DelegatingBroker.java:973)
        
org.apache.openjpa.persistence.EntityManagerImpl.flush(EntityManagerImpl.java:488)
        
org.apache.openejb.persistence.JtaEntityManager.flush(JtaEntityManager.java:130)
        org.eremite.DefaultBeanManager.persist(DefaultBeanManager.java:23)
        sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        java.lang.reflect.Method.invoke(Method.java:585)
        
org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:146)
        
org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:129)
        
org.apache.openejb.core.interceptor.InterceptorStack.invoke(InterceptorStack.java:67)
        
org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:203)
        
org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:165)
        
org.apache.openejb.core.ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java:223)
        
org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:77)
        
org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:321)
        
org.apache.openejb.util.proxy.Jdk13InvocationHandler.invoke(Jdk13InvocationHandler.java:49)
        $Proxy32.persist(Unknown Source)
        org.eremite.HelloServlet.doGet(HelloServlet.java:158)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

root cause

<openjpa-1.0.1-r420667:592145 nonfatal general error>
org.apache.openjpa.persistence.PersistenceException: Unknown column
'partyRelT' in 'field list' {prepstmnt 9125047 INSERT INTO
PartyRelationship (ID, description, name, primaryPartyRole_ID,
secondaryPartyRole_ID, partyRelT) VALUES (?, ?, ?, ?, ?, ?)
[params=(long) 402, (String) , (String) , (long) 3, (long) 4,
(InputStream) [EMAIL PROTECTED] [code=1054,
state=42S22]
FailedObject: [EMAIL PROTECTED]
        
org.apache.openjpa.jdbc.sql.DBDictionary.newStoreException(DBDictionary.java:3938)
        
org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:97)
        
org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:67)
        
org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flushInternal(PreparedStatementManagerImpl.java:108)
        
org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flush(PreparedStatementManagerImpl.java:73)
        
org.apache.openjpa.jdbc.kernel.ConstraintUpdateManager.flush(ConstraintUpdateManager.java:543)
        
org.apache.openjpa.jdbc.kernel.ConstraintUpdateManager.flush(ConstraintUpdateManager.java:105)
        
org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:89)
        
org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:72)
        
org.apache.openjpa.jdbc.kernel.JDBCStoreManager.flush(JDBCStoreManager.java:514)
        
org.apache.openjpa.kernel.DelegatingStoreManager.flush(DelegatingStoreManager.java:130)
        org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1954)
        org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:1852)
        org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1623)
        
org.apache.openjpa.kernel.DelegatingBroker.flush(DelegatingBroker.java:973)
        
org.apache.openjpa.persistence.EntityManagerImpl.flush(EntityManagerImpl.java:488)
        
org.apache.openejb.persistence.JtaEntityManager.flush(JtaEntityManager.java:130)
        org.eremite.DefaultBeanManager.persist(DefaultBeanManager.java:23)
        sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        java.lang.reflect.Method.invoke(Method.java:585)
        
org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:146)
        
org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:129)
        
org.apache.openejb.core.interceptor.InterceptorStack.invoke(InterceptorStack.java:67)
        
org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:203)
        
org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:165)
        
org.apache.openejb.core.ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java:223)
        
org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:77)
        
org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:321)
        
org.apache.openejb.util.proxy.Jdk13InvocationHandler.invoke(Jdk13InvocationHandler.java:49)
        $Proxy32.persist(Unknown Source)
        org.eremite.HelloServlet.doGet(HelloServlet.java:158)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

root cause

org.apache.openjpa.lib.jdbc.ReportingSQLException: Unknown column
'partyRelT' in 'field list' {prepstmnt 9125047 INSERT INTO
PartyRelationship (ID, description, name, primaryPartyRole_ID,
secondaryPartyRole_ID, partyRelT) VALUES (?, ?, ?, ?, ?, ?)
[params=(long) 402, (String) , (String) , (long) 3, (long) 4,
(InputStream) [EMAIL PROTECTED] [code=1054,
state=42S22]
        
org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:192)
        
org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.access$800(LoggingConnectionDecorator.java:57)
        
org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator$LoggingConnection$LoggingPreparedStatement.executeUpdate(LoggingConnectionDecorator.java:858)
        
org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:269)
        
org.apache.openjpa.jdbc.kernel.JDBCStoreManager$CancelPreparedStatement.executeUpdate(JDBCStoreManager.java:1363)
        
org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flushInternal(PreparedStatementManagerImpl.java:97)
        
org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flush(PreparedStatementManagerImpl.java:73)
        
org.apache.openjpa.jdbc.kernel.ConstraintUpdateManager.flush(ConstraintUpdateManager.java:543)
        
org.apache.openjpa.jdbc.kernel.ConstraintUpdateManager.flush(ConstraintUpdateManager.java:105)
        
org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:89)
        
org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:72)
        
org.apache.openjpa.jdbc.kernel.JDBCStoreManager.flush(JDBCStoreManager.java:514)
        
org.apache.openjpa.kernel.DelegatingStoreManager.flush(DelegatingStoreManager.java:130)
        org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1954)
        org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:1852)
        org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1623)
        
org.apache.openjpa.kernel.DelegatingBroker.flush(DelegatingBroker.java:973)
        
org.apache.openjpa.persistence.EntityManagerImpl.flush(EntityManagerImpl.java:488)
        
org.apache.openejb.persistence.JtaEntityManager.flush(JtaEntityManager.java:130)
        org.eremite.DefaultBeanManager.persist(DefaultBeanManager.java:23)
        sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        java.lang.reflect.Method.invoke(Method.java:585)
        
org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:146)
        
org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:129)
        
org.apache.openejb.core.interceptor.InterceptorStack.invoke(InterceptorStack.java:67)
        
org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:203)
        
org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:165)
        
org.apache.openejb.core.ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java:223)
        
org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:77)
        
org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:321)
        
org.apache.openejb.util.proxy.Jdk13InvocationHandler.invoke(Jdk13InvocationHandler.java:49)
        $Proxy32.persist(Unknown Source)
        org.eremite.HelloServlet.doGet(HelloServlet.java:158)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

Reply via email to