java.lang.ClassCastException: org.hibernate.action.DelayedPostInsertIdentifier не может быть приведен к java.lang.Long - PullRequest
2 голосов
/ 07 марта 2012

используется: hibernate 3.6.2, maven 2, postgres 9. У меня есть код, который должен работать, но это не так.Когда я запускаю функциональный тест, у меня появляется ошибка:

java.lang.ClassCastException: org.hibernate.action.DelayedPostInsertIdentifier не может быть приведен к java.lang.Long

Код является стандартныммодель домена:

Объект:

@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;

и т. д. *

DAO:

public abstract class AbstractDao<E, PK extends Serializable> implements Dao<E, PK> {

    private EntityManager entityManager;

    public EntityManager getEntityManager() {
        return entityManager;
    }

    @PersistenceContext(unitName = "MySimulator")
    public void setEntityManager(EntityManager entityManager) {
        this.entityManager = entityManager;
    }

    public abstract Class<E> 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); //<-- some thing wroooong
    }

    @Override
    public void delete(E e) {
        getEntityManager().remove(e);
    }

и т. д. *

И согласно таблице:

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;

Вот трассировка стека до моего кода:

 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)

Почему?Это ошибка гибернации?

Ответы [ 3 ]

1 голос
/ 12 июля 2012

Я столкнулся с точно таким же исключением при выполнении save ().Я решил это, исправив опцию каскада в файле отображения hibernate.Я изменил его с «all-delete-orphan, save-update, delete» на «save-update, delete, delete-orphan», и это сработало для меня.Надеюсь, это поможет.

0 голосов
/ 07 марта 2012

Вы не определили свой первичный ключ как IDENTITY в операторе создания таблицы.

id bigserial NOT NULL IDENTITY
0 голосов
/ 07 марта 2012

Правильно ли указан ваш драйвер и диалект в файле hibernate.properties?

hibernate.connection.driver_class = org.postgresql.Driver

hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect

http://docs.jboss.org/hibernate/orm/3.6/reference/en-US/html_single/#configuration-hibernatejdbc

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...