kotlin - 乐观锁定:不支持的版本类型长
问题描述
我正在尝试将乐观锁定与 Micronaut Data 和 Kotlin 一起使用,但不幸的是它因异常而失败:
14:33:32.113 [default-nioEventLoopGroup-1-2] ERROR i.m.h.s.netty.RoutingInBoundHandler - Unexpected error occurred: An error occurred invoking pre-persist event listeners: Unsupported @Version type: long
io.micronaut.data.event.PersistenceEventException: An error occurred invoking pre-persist event listeners: Unsupported @Version type: long
at io.micronaut.data.runtime.event.EntityEventRegistry.prePersist(EntityEventRegistry.java:92)
at io.micronaut.data.hibernate.event.EventIntegrator.lambda$integrate$9d2e46a6$1(EventIntegrator.java:77)
at org.hibernate.action.internal.EntityInsertAction.preInsert(EntityInsertAction.java:227)
at org.hibernate.action.internal.EntityInsertAction.execute(EntityInsertAction.java:100)
at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:604)
at org.hibernate.engine.spi.ActionQueue.lambda$executeActions$1(ActionQueue.java:478)
at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:684)
at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:475)
at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:348)
at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:40)
at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:102)
at org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1362)
at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:453)
at org.hibernate.internal.SessionImpl.flushBeforeTransactionCompletion(SessionImpl.java:3212)
at org.hibernate.internal.SessionImpl.beforeTransactionCompletion(SessionImpl.java:2380)
at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.beforeTransactionCompletion(JdbcCoordinatorImpl.java:447)
at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl.beforeCompletionCallback(JdbcResourceLocalTransactionCoordinatorImpl.java:183)
at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl.access$300(JdbcResourceLocalTransactionCoordinatorImpl.java:40)
at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.commit(JdbcResourceLocalTransactionCoordinatorImpl.java:281)
...
我的设置看起来像这样(应该很像文档):
import javax.persistence.Column
import javax.persistence.Entity
import javax.persistence.EnumType
import javax.persistence.Enumerated
import javax.persistence.GeneratedValue
import javax.persistence.Id
import javax.persistence.Table
import javax.persistence.Version
@Entity
@Table(name = "invoice_queue")
data class InvoiceQueueEntity(
@Id
@GeneratedValue
var id: Long = 0,
...(things left out for privacy reasons)...
@Version
var version: Long = 0L,
)
创建表的迁移是:
create table invoice_queue
(
id int8 not null,
primary key (id)
);
create sequence hibernate_sequence start 1 increment 1;
alter table if exists invoice_queue
add column version int8 not null default 0;
我错过了什么吗?
解决方案
如果您确定您正在使用javax.persistence.Version
而不是io.micronaut.core.version.annotation.Version
,那么问题可能是 java 字段具有原始类型。
如果你让它可以为空,你应该得到装箱的类型。尝试:
var version: Long? = 0L
推荐阅读
- xamarin - 有没有办法可以覆盖 XF 中标签的文本属性?
- javascript - 限制可以选择的项目数
- java - 使用 SimpleJdbcCall 将输入值作为 1525 传递给 oracle 过程时出错
- javascript - 将没有 api 的 Instagram 主题标签 json 放入谷歌表格的问题
- network-monitoring - 如何设置 Netdata 来监控我的网站性能?
- scikit-learn - 如何知道 NLP 模型中与特定类相关的单词?
- python - Jupyter Notebook (Python 3) 中的错误 - TclError: no display name and no $DISPLAY environment variable
- python - 引用该变量的程序中的错误在声明之前使用
- typescript - 打字稿中常量类型的最佳实践是什么?
- docker - 如何解决“来自守护程序的错误响应:rpc 错误:code = Unknown desc = swarm 没有领导者。”