java.lang.ClassCastException : org. hibernate.action.DelayedPostInsertIdentifier 无法转换为 java.lang.Long

标签 java hibernate postgresql maven

使用: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)
为什么?这是hibernate的bug吗?

最佳答案

我在执行 save() 时遇到了完全相同的异常。我通过更正 hibernate 映射文件中的级联选项解决了这个问题。我将其从“all-delete-orphan,save-update,delete”更改为“save-update,delete,delete-orphan”,它对我有用。 希望对您有所帮助。

关于java.lang.ClassCastException : org. hibernate.action.DelayedPostInsertIdentifier 无法转换为 java.lang.Long,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9595624/

相关文章:

java - 在 java 10 中使用 lombok.Getter(lazy = true) 时出现不兼容类型错误

java - hibernate - 从集合中删除项目

postgresql - 使用 Postgis 对象迁移旧 PostgreSQL 数据库时出错

mysql - JPA 一元运算符

java - 使用hibernate创建用户表名

node.js - docker compose up 后 Postgres 立即关闭?

java - 可调用语句 PostgreSQL :Invalid number of parameters error

java - 如何将 deploy.jar 添加到类路径?

java - Logstash 2.3.3 多行过滤器不适用于多个工作人员

java - 嵌套集的 JPA Criteria 查询