Re: Cannot insert to 'path' field using EclipseLink

From: Steven Schlansker <stevenschlansker(at)gmail(dot)com>
To: Daryl Foster <daryl(dot)foster(at)oncenter(dot)com>
Cc: "pgsql-general(at)postgresql(dot)org" <pgsql-general(at)postgresql(dot)org>, "pgsql-jdbc(at)postgresql(dot)org" <pgsql-jdbc(at)postgresql(dot)org>, "pgsql-novice(at)postgresql(dot)org" <pgsql-novice(at)postgresql(dot)org>
Subject: Re: Cannot insert to 'path' field using EclipseLink
Date: 2014-03-12 17:40:46
Message-ID: 9C61BFB9-E3C8-4CCC-AEB3-21D9B67A9642@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general pgsql-jdbc pgsql-novice

> On Mar 12, 2014, at 10:12 AM, Daryl Foster <daryl(dot)foster(at)oncenter(dot)com> wrote:
>
> java.lang.ClassCastException: org.postgresql.geometric.PGpath cannot be cast to org.postgresql.geometric.PGpath
>

That's a sure sign of ClassLoader confusion. Make sure there is only one copy of the driver jar in your application or the JBoss container, but never both.

>
>> On Wed, Mar 12, 2014 at 7:37 AM, Daryl Foster <daryl(dot)foster(at)oncenter(dot)com> wrote:
>> I have a java app running in JBoss that uses EclipseLink to persist to a Postgres database. I've added a field with a 'path' datatype to one of the tables but I keep getting the following exception when I try to insert data:
>>
>> org.postgresql.util.PSQLException: Can't infer the SQL type to use for an instance of org.postgresql.geometric.PGpath. Use setObject() with an explicit Types value to specify the type to use.
>>
>> Here's the table definition:
>>
>> CREATE TABLE schema.table_name
>> (
>> item_id uuid NOT NULL,
>> item_path path NOT NULL
>> )
>>
>> The java entity is representing the item_path field as a List<Point> object, and I'm using a converter to map from the List<Point> object to a PGpath object:
>>
>> import org.eclipse.persistence.mappings.DatabaseMapping;
>> import org.eclipse.persistence.mappings.converters.Converter;
>> import org.eclipse.persistence.sessions.Session;
>> import org.postgresql.geometric.PGpath;
>> import java.awt.Point;
>> import java.util.ArrayList;
>> import java.util.List;
>> import static java.sql.Types.OTHER;
>>
>> public class PgPathConverter implements Converter
>> {
>> @Override
>> public boolean isMutable ()
>> {
>> return false;
>> }
>>
>> @Override
>> public List<Point> convertDataValueToObjectValue (Object value, Session session)
>> {
>> // Code that converts PGpath to List<Point>
>> }
>>
>> @Override
>> public PGpath convertObjectValueToDataValue (Object value, Session session)
>> {
>> // Code that converts List<Point> to PGpath
>> }
>>
>> @Override
>> public void initialize (DatabaseMapping mapping, Session session)
>> {
>> mapping.getField ().setSqlType (OTHER);
>> }
>> }
>>
>> The entity class is defined as follows:
>>
>> @Entity
>> @Table (
>> name = "table_name",
>> schema = "schema"
>> )
>> @Converter (
>> name = "path",
>> converterClass = PgPathConverter.class
>> )
>> public class TableName
>> {
>> public TableName () {}
>> private static final long serialVersionUID = 1L;
>>
>> @Column (name = "item_path")
>> @Convert ("path")
>> private List<Point> m_ItemPath;
>>
>> @Id
>> @Column (
>> name = "item_id",
>> unique = true,
>> nullable = false
>> )
>> private UUID m_ItemId;
>>
>> public UUID getItemId ()
>> {
>> return m_ItemId;
>> }
>>
>> public List<Point> getItemPath ()
>> {
>> return m_InkPath;
>> }
>>
>> public void setItemId (UUID itemId)
>> {
>> m_ItemId = itemId;
>> }
>>
>> public void setInkPath (List<Point> itemPath)
>> {
>> m_ItemPath = itemPath;
>> }
>> }
>>
>> Finally, here's the exception I get when I call `EntityManager.persist (entity)`:
>>
>> 18:10:33,789 ERROR [org.jboss.as.ejb3] (http-/0.0.0.0:8080-1) javax.ejb.EJBTransactionRolledbackException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.DatabaseException
>> Internal Exception: org.postgresql.util.PSQLException: Can't infer the SQL type to use for an instance of org.postgresql.geometric.PGpath. Use setObject() with an explicit Types value to specify the type to use.
>> Error Code: 0
>> Call: INSERT INTO schema.table_name (item_id, item_path) VALUES (?, ?)
>> bind => [2 parameters bound]
>> 18:10:33,789 ERROR [org.jboss.as.ejb3.invocation] (http-/0.0.0.0:8080-1) JBAS014134: EJB Invocation failed on component TableNameRepository for method public void com.mycompany.myproject.data.Repository.flush() throws javax.persistence.TransactionRequiredException,javax.persistence.PersistenceException: javax.ejb.EJBTransactionRolledbackException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.DatabaseException
>> Internal Exception: org.postgresql.util.PSQLException: Can't infer the SQL type to use for an instance of org.postgresql.geometric.PGpath. Use setObject() with an explicit Types value to specify the type to use.
>> Error Code: 0
>> Call: INSERT INTO schema.table_name (item_id, item_path VALUES (?, ?)
>> bind => [2 parameters bound]
>> at org.jboss.as.ejb3.tx.CMTTxInterceptor.handleInCallerTx(CMTTxInterceptor.java:138) [jboss-as-ejb3-7.2.0.Final-redhat-8.jar:7.2.0.Final-redhat-8]
>> at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInCallerTx(CMTTxInterceptor.java:228) [jboss-as-ejb3-7.2.0.Final-redhat-8.jar:7.2.0.Final-redhat-8]
>> at org.jboss.as.ejb3.tx.CMTTxInterceptor.required(CMTTxInterceptor.java:317) [jboss-as-ejb3-7.2.0.Final-redhat-8.jar:7.2.0.Final-redhat-8]
>> at org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(CMTTxInterceptor.java:214) [jboss-as-ejb3-7.2.0.Final-redhat-8.jar:7.2.0.Final-redhat-8]
>> at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final-redhat-2.jar:1.1.1.Final-redhat-2]
>> at org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation(CurrentInvocationContextInterceptor.java:41) [jboss-as-ejb3-7.2.0.Final-redhat-8.jar:7.2.0.Final-redhat-8]
>> at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final-redhat-2.jar:1.1.1.Final-redhat-2]
>> at org.jboss.as.ejb3.component.interceptors.ShutDownInterceptorFactory$1.processInvocation(ShutDownInterceptorFactory.java:64) [jboss-as-ejb3-7.2.0.Final-redhat-8.jar:7.2.0.Final-redhat-8]
>> at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final-redhat-2.jar:1.1.1.Final-redhat-2]
>> at org.jboss.as.ejb3.component.interceptors.LoggingInterceptor.processInvocation(LoggingInterceptor.java:59) [jboss-as-ejb3-7.2.0.Final-redhat-8.jar:7.2.0.Final-redhat-8]
>> at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final-redhat-2.jar:1.1.1.Final-redhat-2]
>> at org.jboss.as.ee.component.NamespaceContextInterceptor.processInvocation(NamespaceContextInterceptor.java:50) [jboss-as-ee-7.2.0.Final-redhat-8.jar:7.2.0.Final-redhat-8]
>> at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final-redhat-2.jar:1.1.1.Final-redhat-2]
>> at org.jboss.as.ejb3.component.interceptors.AdditionalSetupInterceptor.processInvocation(AdditionalSetupInterceptor.java:55) [jboss-as-ejb3-7.2.0.Final-redhat-8.jar:7.2.0.Final-redhat-8]
>> at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final-redhat-2.jar:1.1.1.Final-redhat-2]
>> at org.jboss.as.ee.component.TCCLInterceptor.processInvocation(TCCLInterceptor.java:45) [jboss-as-ee-7.2.0.Final-redhat-8.jar:7.2.0.Final-redhat-8]
>> at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final-redhat-2.jar:1.1.1.Final-redhat-2]
>> at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61) [jboss-invocation-1.1.1.Final-redhat-2.jar:1.1.1.Final-redhat-2]
>> at org.jboss.as.ee.component.ViewService$View.invoke(ViewService.java:165) [jboss-as-ee-7.2.0.Final-redhat-8.jar:7.2.0.Final-redhat-8]
>> at org.jboss.as.ee.component.ViewDescription$1.processInvocation(ViewDescription.java:182) [jboss-as-ee-7.2.0.Final-redhat-8.jar:7.2.0.Final-redhat-8]
>> at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final-redhat-2.jar:1.1.1.Final-redhat-2]
>> at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61) [jboss-invocation-1.1.1.Final-redhat-2.jar:1.1.1.Final-redhat-2]
>> at org.jboss.as.ee.component.ProxyInvocationHandler.invoke(ProxyInvocationHandler.java:72) [jboss-as-ee-7.2.0.Final-redhat-8.jar:7.2.0.Final-redhat-8]
>> ...
>> --
>> Sincerely,
>> Daryl Foster
>
>
>
> --
> Sincerely,
> Daryl Foster
> Software Engineer
> On Center Software, Inc.
>
> P: 281.210.0177
> F: 281.297.9001
> W: www.oncenter.com

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Rob Sargent 2014-03-12 18:23:13 Re: Cannot insert to 'path' field using EclipseLink
Previous Message bobJobS 2014-03-12 17:13:08 Re: High Level Committers Wanted

Browse pgsql-jdbc by date

  From Date Subject
Next Message Rob Sargent 2014-03-12 18:23:13 Re: Cannot insert to 'path' field using EclipseLink
Previous Message Daryl Foster 2014-03-12 17:12:20 Re: Cannot insert to 'path' field using EclipseLink

Browse pgsql-novice by date

  From Date Subject
Next Message Rob Sargent 2014-03-12 18:23:13 Re: Cannot insert to 'path' field using EclipseLink
Previous Message Daryl Foster 2014-03-12 17:12:20 Re: Cannot insert to 'path' field using EclipseLink