title: java.lang.ClassCastException: org.hibernate.action.DelayedPostInsertIdentifier cannot be cast to java.lang.Long
body: <p>used: hibernate 3.6.2, maven 2, postgres 9.
  I have code that must work but it doesn't. When I launch functional test I've got the error:</p>
  
  <p>java.lang.ClassCastException: org.hibernate.action.DelayedPostInsertIdentifier cannot be cast to java.lang.Long</p>
  
  <p>Code is a standart domain model:</p>
  
  <p>Entity:</p>
  
  <pre><code>@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
  @Entity
  @Table(schema = "simulators", name = "mySimulator_card")
  public class MySimulatorCard {
  
      @Id
      @Column(name = "id")
      @GeneratedValue(strategy = GenerationType.IDENTITY)
      private Long id;
  
      @Column(name = "account_number", unique = true, nullable = false)
      private String accountNumber;
  </code></pre>
  
  <p>etc...</p>
  
  <p>DAO:</p>
  
  <pre><code>public abstract class AbstractDao&lt;E, PK extends Serializable&gt; implements Dao&lt;E, PK&gt; {
  
      private EntityManager entityManager;
  
      public EntityManager getEntityManager() {
          return entityManager;
      }
  
      @PersistenceContext(unitName = "MySimulator")
      public void setEntityManager(EntityManager entityManager) {
          this.entityManager = entityManager;
      }
  
      public abstract Class&lt;E&gt; getEntityClass();
  
      @Override
      public void persist(E e) {
          getEntityManager().persist(e);
      }
  
      @Override
      public E merge(E e) {
          return getEntityManager().merge(e);
      }
  
      @Override
      public void refresh(E e) {
          getEntityManager().refresh(e); //&lt;-- some thing wroooong
      }
  
      @Override
      public void delete(E e) {
          getEntityManager().remove(e);
      }
  </code></pre>
  
  <p>etc...</p>
  
  <p>And according table:</p>
  
  <pre><code>CREATE TABLE simulators.mySimulator_card
  (
    id bigserial NOT NULL,
    account_number character varying(255) NOT NULL,
  
  etc...
  
    CONSTRAINT mySimulator_card_pk PRIMARY KEY (id),
    CONSTRAINT mySimulator_card_account_fk FOREIGN KEY (account_id)
        REFERENCES simulators.mySimulator_account (id) MATCH SIMPLE
        ON UPDATE NO ACTION ON DELETE NO ACTION,
    CONSTRAINT mySimulator_card_currency_fk FOREIGN KEY (currency_id)
        REFERENCES simulators.mySimulator_currency ("name") MATCH SIMPLE
        ON UPDATE NO ACTION ON DELETE NO ACTION,
    CONSTRAINT mySimulator_card_product_fk FOREIGN KEY (product_id)
        REFERENCES simulators.mySimulator_product (id) MATCH SIMPLE
        ON UPDATE NO ACTION ON DELETE NO ACTION,
    CONSTRAINT mySimulator_account_account_number_uq UNIQUE (account_number),
    CONSTRAINT mySimulator_card_san_uq UNIQUE (san)
  )
  WITH (
    OIDS=FALSE
  );
  ALTER TABLE simulators.mySimulator_card OWNER TO functional;
  </code></pre>
  
  <p>Here are stack trace till my code:</p>
  
  <pre><code> at org.hibernate.type.descriptor.java.LongTypeDescriptor.unwrap(LongTypeDescriptor.java:36)
          at org.hibernate.type.descriptor.sql.BigIntTypeDescriptor$1.doBind(BigIntTypeDescriptor.java:52)
          at org.hibernate.type.descriptor.sql.BasicBinder.bind(BasicBinder.java:91)
          at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:282)
          at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:277)
          at org.hibernate.loader.Loader.bindPositionalParameters(Loader.java:1873)
          at org.hibernate.loader.Loader.bindParameterValues(Loader.java:1844)
          at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1716)
          at org.hibernate.loader.Loader.doQuery(Loader.java:801)
          at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274)
          at org.hibernate.loader.Loader.loadEntity(Loader.java:2037)
          at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:86)
          at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:76)
          at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3293)
          at org.hibernate.event.def.DefaultRefreshEventListener.onRefresh(DefaultRefreshEventListener.java:151)
          at org.hibernate.event.def.DefaultRefreshEventListener.onRefresh(DefaultRefreshEventListener.java:62)
          at org.hibernate.impl.SessionImpl.fireRefresh(SessionImpl.java:1118)
          at org.hibernate.impl.SessionImpl.refresh(SessionImpl.java:1098)
          at org.hibernate.ejb.AbstractEntityManagerImpl.refresh(AbstractEntityManagerImpl.java:738)
          at org.hibernate.ejb.AbstractEntityManagerImpl.refresh(AbstractEntityManagerImpl.java:713)
          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
          at java.lang.reflect.Method.invoke(Method.java:601)
          at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:365)
          at $Proxy153.refresh(Unknown Source)
          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
          at java.lang.reflect.Method.invoke(Method.java:601)
          at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:240)
          at $Proxy82.refresh(Unknown Source)
          at com.goooogle.simulator.mysimulator.dao.AbstractDao.refresh(AbstractDao.java:42)
  </code></pre>
  
  <p>Why? Is it hibernate's bug?</p>