java.lang.ClassCastException:org.hibernate.action.DelayedPostInsertIdentifier不能强制转换为java.lang.Long
使用:hibernate 3.6.2、maven 2、postgres 9。 我有代码,必须工作,但它没有。当我启动功能测试时,我得到了错误: 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
@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