java.lang.ClassCastException:org.hibernate.action.DelayedPostInsertIdentifier不能强制转换为java.lang.Long

java.lang.ClassCastException:org.hibernate.action.DelayedPostInsertIdentifier不能强制转换为java.lang.Long,java,hibernate,postgresql,maven,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 @T

使用: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;
等等

道:

以下是我的代码之前的堆栈跟踪:

 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吗?

hibernate.properties文件中的驱动程序和方言是否正确

hibernate.connection.driver\u class=org.postgresql.driver

hibernate.dialen=org.hibernate.dialen.postgresqldialen


您没有在create table语句中将主键定义为标识

id bigserial NOT NULL IDENTITY

在执行save()时,我遇到了完全相同的异常。我通过更正hibernate映射文件中的cascade选项解决了这个问题。我把它从“全部删除孤立项,保存更新,删除”改为“保存更新,删除,删除孤立项”,这对我很有用。
希望能有所帮助。

这个异常今天让我很困惑,它发生在使用JpaRepository的Spring Boot应用程序中

在我的例子中,这是在调用
jparepository.findBySomeEntity
时发生的。某些实体已使用
JpaRepository.save(…)
而不是
JpaRepository.saveAndFlush(…)
保存在同一事务中。因此,其ID尚未设置

看起来Hibernate正在尝试用未提交的保存事务中创建的
DelayedPostInsertIdentifier
替换缺少的实体id,即使它无法转换为id类型


这是一个误导性的例外。幸好它很容易被
saveAndFlush(…)

方言修复,但没有提供驱动程序类。我添加了行,但没有帮助我不是postgres的专家,但postgreSQL中没有关键字标识,因此我无法使用您的示例。请尝试创建一个序列。创建序列sq;创建表t_test(id INTEGER主键DEFAULT NEXTVAL('sq'),名称VARCHAR(10));插入t_测试(名称)值(“Andrew”);插入t_测试(名称)值(“Gordon”);从t_测试中选择*;
 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)
id bigserial NOT NULL IDENTITY