-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 4 posts ] 
Author Message
 Post subject: Oracle Array - Entity mapping problem - Could not serialize
PostPosted: Tue Jan 30, 2007 9:57 am 
Newbie

Joined: Tue Jan 30, 2007 5:32 am
Posts: 3
JBoss version:4.0.4

Hibernate version:3.2

Database:Oracle 10g

Hi. I am facing an entity mapping problem. I have an Oracle stored function which takes as a parameter an Oracle array and returns a refcursor. And I want to map the returning result to an entity class.

I have created the entity class as follows:

Code:
@Entity
@SqlResultSetMapping(name = "flightBaggageSummaryMapping",
      entities = @EntityResult(entityClass = FlightBaggageSummary.class))
@NamedNativeQuery(name = "flightBaggageSummaryQuery",
                  query = "{?=call MULTI_FLIGHT_PAX_AND_BAG_COUNT(:flightList)}",
                  resultSetMapping = "flightBaggageSummaryMapping",     
                  hints = {@QueryHint(name = "org.hibernate.callable", value = "true"),
                           @QueryHint(name = "org.hibernate.readOnly", value = "true")})
public class FlightBaggageSummary implements Serializable
{
   
   private static final long serialVersionUID = 1L;

   private long    flightId;

   private long    checkedInBags;
   private long    loadedBaggageHallBags;

   @Id
   public long getFlightId()
   {
      return flightId;
   }

   public void setFlightId(long flightId)
   {
      this.flightId = flightId;
   }

   // Accessors and mutators and @Column annotations here
   ...

}


And in a Facade, I have the following method:

Code:
   public List<FlightBaggageSummary> getFlightBaggageSummary(Long[] flightIds) throws ApplicationTierException
   {
      // Validate parameter
      if (flightIds == null || flightIds.length == 0)
      {
         throw new IllegalArgumentException();
      }
     
      ARRAY arrayOfFlightIds = null;
      try
      {
         // The datasource is a member variable of the Facade
         Connection connection = ((WrappedConnection)dataSource.getConnection()).getUnderlyingConnection();
     
      // FLIGHT_LIST is the Oracle array type that is passed as aparameter in the stored function
      ArrayDescriptor arrayDescriptor = ArrayDescriptor.createDescriptor("FLIGHT_LIST", connection);
      arrayOfFlightIds = new ARRAY(arrayDescriptor, connection, flightIds);
      }
      catch (SQLException e)
      {
         throw new ApplicationTierException(e);
      }
   
     
      Query query = entityManager.createNamedQuery("flightBaggageSummaryQuery").setParameter("flightList",
            arrayOfFlightIds);

      return (List<FlightBaggageSummary>) query.getResultList();
   }


to get information about flights.
And I get the following exception:

Stack trace:javax.ejb.EJBException: javax.persistence.PersistenceException: org.hibernate.type.SerializationException: could not serialize
at org.jboss.ejb3.tx.Ejb3TxPolicy.handleExceptionInOurTx(Ejb3TxPolicy.java:69)
at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:83)
at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:197)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:76)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:62)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
at org.jboss.aspects.security.RoleBasedAuthorizationInterceptor.invoke(RoleBasedAuthorizationInterceptor.java:167)
at org.jboss.ejb3.security.RoleBasedAuthorizationInterceptor.invoke(RoleBasedAuthorizationInterceptor.java:100)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
at org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:78)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:47)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
at org.jboss.ejb3.stateless.StatelessContainer.localInvoke(StatelessContainer.java:181)
at org.jboss.ejb3.stateless.StatelessLocalProxy.invoke(StatelessLocalProxy.java:79)
at $Proxy107.getFlightBaggageSummary(Unknown Source)
at com.app.web.delegates.FlightServicesDelegate.getFlightBaggageSummary(FlightServicesDelegate.java:202)
at com.app.web.servlets.flight.FlightLoopServlet.doGet(FlightLoopServlet.java:213)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:697)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at com.app.web.filters.EncodingFilter.doFilter(EncodingFilter.java:110)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at com.app.web.filters.FlightLoopFilter.doFilter(FlightLoopFilter.java:112)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at com.app.web.filters.UserContextFilter.doFilter(UserContextFilter.java:149)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:175)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:524)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:74)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
at java.lang.Thread.run(Unknown Source)
Caused by: javax.persistence.PersistenceException: org.hibernate.type.SerializationException: could not serialize
at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:567)
at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:56)
at com.ultra_as.ultratrak.application.services.FlightServiceFacadeBean.getFlightBaggageSummary(FlightServiceFacadeBean.java:243)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:112)
at org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:166)
at org.jboss.ejb3.interceptor.EJB3InterceptorsInterceptor.invoke(EJB3InterceptorsInterceptor.java:63)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:54)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:79)
... 50 more
Caused by: org.hibernate.type.SerializationException: could not serialize
at org.hibernate.util.SerializationHelper.serialize(SerializationHelper.java:158)
at org.hibernate.util.SerializationHelper.serialize(SerializationHelper.java:178)
at org.hibernate.type.SerializableType.toBytes(SerializableType.java:74)
at org.hibernate.type.SerializableType.toString(SerializableType.java:58)
at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:87)
at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:65)
at org.hibernate.loader.Loader.bindNamedParameters(Loader.java:1748)
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1577)
at org.hibernate.loader.Loader.doQuery(Loader.java:661)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
at org.hibernate.loader.Loader.doList(Loader.java:2145)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2029)
at org.hibernate.loader.Loader.list(Loader.java:2024)
at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:118)
at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1684)
at org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:142)
at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:164)
at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:53)
... 64 more
Caused by: java.io.NotSerializableException: oracle.jdbc.driver.T4CConnection
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeObject(Unknown Source)
at org.hibernate.util.SerializationHelper.serialize(SerializationHelper.java:154)
... 81 more

The exception occurs when the return statement of the getFlightBaggageSummary method is called. I'm a bit stuck to be honest. I'm converting a java array of Longs to an Oracle ARRAY object but it doesn't seem to work. I can't figure out from the exception where could be the problem.

Any help would be welcome.
Thanks in advance


Last edited by kwstasm on Fri Feb 02, 2007 6:56 am, edited 1 time in total.

Top
 Profile  
 
 Post subject:
PostPosted: Fri Feb 02, 2007 6:55 am 
Newbie

Joined: Tue Jan 30, 2007 5:32 am
Posts: 3
The Oracle stored function takes a parameter of type FLIGHT_LIST.

The type is defined as follows:
create or replace TYPE flight_list AS
TABLE OF NUMBER(10)

Could anyone tell me if there is a way to pass my Long[] and set the named parameter of the named native query, or will I have to go via plain JDBC and a CallableStatement?


Top
 Profile  
 
 Post subject:
PostPosted: Fri Feb 02, 2007 6:04 pm 
Hibernate Team
Hibernate Team

Joined: Tue Aug 26, 2003 6:10 am
Posts: 8615
Location: Neuchatel, Switzerland (Danish)
hibernate does not know the propritary oracle array type and hence it attempts to handle it as a Serializble object (but apparently it isn't even though it implements Serializable).

Anyway to work with such db specific types you should implement a custom type that handles it.

_________________
Max
Don't forget to rate


Top
 Profile  
 
 Post subject:
PostPosted: Sun Feb 04, 2007 12:32 am 
Newbie

Joined: Tue Jan 30, 2007 5:32 am
Posts: 3
Thanks for your answer.
Will I have to do something similar to this:
http://www.hibernate.org/393.html


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 4 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.